gpt4 book ai didi

asp.net-mvc - 更新用户声明未生效。为什么?

转载 作者:行者123 更新时间:2023-12-03 13:24:31 29 4
gpt4 key购买 nike

我正在将ASP.NET MVC 5.1与Owin和Claims身份验证一起使用。

用户更改其电子邮件后,我需要更新用户声明,因此我在 Controller 中进行了尝试:

  ClaimsIdentity identity = (ClaimsIdentity)User.Identity;
Claim claim = identity.FindFirst(ClaimTypes.Email);
identity.RemoveClaim(claim);
identity.AddClaim(new Claim(ClaimTypes.Email, newEmail));

IOwinContext context = new OwinContext();

context.Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
context.Authentication.SignIn(identity);

声明已更改,但是当我刷新页面时,电子邮件声明再次变为原始声明...

似乎cookie没有被更新。知道我在做什么错吗?

是否有可能从身份中获取“IsPersistent”的值,所以当我再次对其进行签名时,我将具有相同的值?

谢谢,

米格尔

最佳答案

我遇到了同样的问题,所以只想在这里总结一下我的发现。正如克里斯所说,答案的基础确实在这里:How to change authentication cookies after changing UserName of current user with asp.net identity,但我发现该线程有点难以遵循,而且这个问题实际上并不是直接重复的。

首先,从当前的OWIN上下文中获取AuthenticationManager。一旦有了它,就可以通过调用SignIn方法来获取“isPersistent”的值(以及原始AuthenticateAsync调用中的其他属性)。然后,要更新当前用户身份的声明,您只需要像下面这样替换AuthenticationResponseGrant属性的值即可:

var identity = (ClaimsIdentity)User.Identity;

// Call AddClaim, AddClaims or RemoveClaim on the user identity.

IOwinContext context = Request.GetOwinContext();

var authenticationContext =
await context.Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie);

if (authenticationContext != null)
{
authenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant(
identity,
authenticationContext.Properties);
}

这是 AuthenticationResponseGrant属性的最终设置,它实际上会更新cookie。

希望这对其他读者有所帮助。

关于asp.net-mvc - 更新用户声明未生效。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960511/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com