更改HttpContext.Current.User.Identity.Name

时间:2018-03-07 08:50:14

标签: c# asp.net-mvc httpcontext roleprovider

在SetAuthCookie部分,我们稍微操纵用户名

string userInfo = identity.Name + "|"  + Util.GetIPAddress();
FormsAuthentication.SetAuthCookie(userInfo, isPersistent);

这是为了对Application_AuthenticateRequest

内的用户IP地址进行一些检查

稍后我想将名称还原为正常名称(没有" |"和IP地址),但无法找到方法。

我遇到的问题通常是处理用户名没有正确更新,但我需要的是重新分配名称。

我尝试设置一个新的Cookie并设置一个新的Authcookie,但它们没有用,HttpContext.Current.User.Identity.Name没有变化。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

构建您自己的身份验证cookie以添加所需的自定义值是一种更好的方法,这样可以保持用户名不变,更加一致并且具有预期的行为。

考虑到这一点,你在cookie中加密了userdata(ip)。

    var cookie = FormsAuthentication.GetAuthCookie(name, rememberMe);
    var ticket = FormsAuthentication.Decrypt(cookie.Value);
    var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration,ticket.IsPersistent, userData, ticket.CookiePath);
    var encTicket = FormsAuthentication.Encrypt(newTicket);
    cookie.Value = encTicket;

    //and add the cookie to the current HttpContext.Response
    response.Cookies.Add(cookie);

另外,您可以从当前的User.Identity

中检索此userData
var data = (HttpContext.Current?.User.Identity as FormsIdentity)?.Ticket.UserData