如何刷新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,您似乎需要将用户注销并重新登录。
此时您面临的困境是如何在没有密码的情况下登录用户。
最好的前景似乎是在用户名更改时询问用户的密码。这有一个合理的感觉,并武装您的密码。
这里。这是一种(丑陋的?)方法:
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
处理这个吗?)