私は、新しいユーザーの作成と審査のプロセスに取り組んでいます。ユーザーが登録すると、トークン付きのクエリ文字列を含むリンクが電子メールに送信され、電子メール アドレスを確認できます。ユーザーがリンクをクリックすると、情報を検証するページにリダイレクトされ、ロールがGuestからMemberに変更されます。
プロセスフロー
電子メール > verifyEmail.aspx > dashboard.aspx
ユーザーが既に Web アプリにログインしている場合、電子メールのリンクをクリックすると、それに応じてロールが変更されます。ただし、dashboard.aspx にリダイレクトされると、User.IsInRole("Member") は false になります。ログアウトしてから再度ログインすると、User.IsInRole("Member") は true になります。だから私の質問は、サインアウトを強制せずにユーザーのアイデンティティとユーザーのコンテキストを更新するにはどうすればよいですか? ロールのクッキーと関係があると思いますか?
コード
If userToken.Token1 = token Then
Dim userRole = Roles.GetRolesForUser(authUser)
Dim userIdentity = New GenericIdentity(authUser)
Dim principal = New GenericPrincipal(userIdentity, userRole)
Dim isOnline As Boolean = False
If HttpContext.Current IsNot Nothing AndAlso HttpContext.Current.User.Identity.IsAuthenticated Then
If Not Membership.GetUser.ProviderUserKey Is Nothing Then
isOnline = True
End If
End If
Context.User = principal
If User.IsInRole("Guest") = True AndAlso User.IsInRole("Member") = False Then
Roles.AddUserToRole(User.Identity.Name, "Member")
Roles.RemoveUserFromRole(User.Identity.Name, "Guest")
If isOnline = True Then
'***do stuff here to change the context
Response.Redirect("../Account/GetStarted.aspx")
End If
End If
End If