1

ユーザーのログインに 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 を更新できますか?

4

2 に答える 2

1

OPはこちら。これは、それを行う1つの(醜い?)方法です。

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ます(正しいですか?)

@デイブA

このコードを使用する必要があると思いますが、それを自分のカスタムに入れますMemershipProvider(そうですか?MembershipProviderこれを処理するのは ですか?)

于 2013-04-02T13:18:20.360 に答える
1

メンバーシップを通じて Cookie を変更するには、ユーザーをログアウトして再度ログインする必要があるようです。

その時点で直面するジレンマは、パスワードなしでユーザーをログインさせる方法です。

最良の見込み客は、ユーザー名の変更中にユーザーのパスワードを要求しているようです。これには合理的な感覚があり、パスワードを使用できます。

于 2013-04-02T23:28:58.233 に答える