Как изменить Context.User после смены роли пользователя

Я работаю над процессом создания и проверки новых пользователей. После того как пользователь зарегистрировался, ему отправляют ссылку, содержащую строку запроса с токеном, на его электронную почту, чтобы он мог проверить свой адрес электронной почты. Когда пользователь щелкает ссылку, он перенаправляется на страницу, которая проверяет его информацию, а затем меняет свою роль с Гость на Участник.

Процесс потока

Электронная почта> verifyEmail.aspx > dashboard.aspx

Когда пользователь уже вошел в веб-приложение и щелкнул ссылку в своем электронном письме, его роль изменилась соответствующим образом; однако, когда они перенаправляются в 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

1 ответ

Решение

Предполагая, что вы используете проверку подлинности формы, может быть, вам нужно использовать следующий метод:

FormsAuthentication.SetAuthCookie

Это создаст "Билет аутентификации для предоставленного имени пользователя и добавит его в коллекцию файлов cookie ответа или в URL, если вы используете аутентификацию без файлов cookie".

взято из MSDN

Другие вопросы по тегам