如何刷新cookie以反映用户更改电子邮件

本文关键字:用户 电子邮件 cookie 何刷新 刷新 | 更新日期: 2023-09-27 18:06:51

我使用WebSecurity和SimpleMembershipProvider来登录用户。

用户可以更改邮箱

Dim memberId As Integer = 1
Dim context As UsersContext = New UsersContext
Dim userProfile As UserProfile =
    context.UserProfiles.Where(Function(f) f.UserId = memberId).SingleOrDefault()
' Email before the change: "a@a.com"
userProfile.UserName = "b@b.com"
context.SaveChanges()

然而,在此更新之后,HttpContext仍然报告用户为他们的旧电子邮件。

' Name is "a@a.com" but should be "b@b.com"
HttpContext.User.Identity.Name

一开始我以为我可以把用户注销然后重新登录

WebSecurity.Logout()
' but I don't have the user's password
WebSecurity.Login("b@b.com", "???")

我如何刷新认证cookie以反映用户更改其登录详细信息?

如何刷新cookie以反映用户更改电子邮件

要通过会员资格更改cookie,您似乎需要将用户注销并重新登录。

此时您面临的困境是如何在没有密码的情况下登录用户

最好的前景似乎是在用户名更改时询问用户的密码。这有一个合理的感觉,并武装您的密码。

这里。这是一种(丑陋的?)方法:

Dim newEmail As String = "b@b.com"
Dim ticket As FormsAuthenticationTicket =
    New FormsAuthenticationTicket(newEmail, False, FormsAuthentication.Timeout.Minutes)
Dim identity As IIdentity = New FormsIdentity(ticket)
HttpContext.Current.User = New RolePrincipal(identity)
FormsAuthentication.SetAuthCookie(newEmail, False)

它工作得很好,但是看起来有点丑。它迫使我的应用程序成为依赖于FormsAuthentication(正确吗?)

@Dave

你认为我应该使用这个代码,但把它放在我自己的自定义MemershipProvider(是这样吗?是MembershipProvider处理这个吗?)