1

私は、新しいユーザーの作成と審査のプロセスに取り組んでいます。ユーザーが登録すると、トークン付きのクエリ文字列を含むリンクが電子メールに送信され、電子メール アドレスを確認できます。ユーザーがリンクをクリックすると、情報を検証するページにリダイレクトされ、ロールが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
4

1 に答える 1

1

フォーム認証を使用していると仮定すると、次の方法を使用する必要がある場合があります。

FormsAuthentication.SetAuthCookie

これにより、「指定されたユーザー名の認証チケットが作成され、応答の Cookie コレクションに追加されるか、Cookie を使用しない認証を使用している場合は URL に追加されます。」

MSDN から取得

于 2014-03-24T02:47:00.033 に答える