Что делает FormsAuthentication.SetAuthCookie

Я использую элемент управления createuserwizard. В событии CreatedUser я поместил этот код, чтобы добавить пользователя в роль.

    protected void RegisterUser_CreatedUser(object sender, EventArgs e)
    {
        FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);


        if (!Roles.IsUserInRole("Test"))
        {
            var User= Membership.GetUser();
            Roles.AddUserToRole(User.UserName, "Test");
        }

        string continueUrl = RegisterUser.ContinueDestinationPageUrl;

        if (String.IsNullOrEmpty(continueUrl))
        {
            continueUrl = "~/";
        }
        Response.Redirect(continueUrl);
    }

Я также хотел бы знать, что означает FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */); и для чего он используется, и почему Membership.GetUser() имеет значение null.

Ответ 1

У вас есть LoginCreatedUser="false" или DisableCreatedUser="true" на CreateUserWizard?

Это предотвратит немедленный вход пользователя в систему и приведет к тому, что Membership.GetUser() вернет значение null, так как пользователь в настоящий момент не зарегистрирован.

Если вы хотите, чтобы пользователь вошел в систему сразу, не устанавливайте ни те, ни оба LoginCreatedUser="true" и DisableCreatedUser="false" на CreateUserWizard. Это должно заставить ваш текущий код работать.

FormsAuthentication.SetAuthCookie() устанавливает cookie браузера для запуска сеанса пользователя. Это то, что заставляет пользователя регистрироваться каждый раз, когда страница отправляется на сервер. createPersistentCookie создает постоянный файл cookie, который не истекает, когда браузер закрыт, поэтому пользователь может вернуться на сайт и автоматически войти в систему. Он должен быть основан на том, установил ли пользователь флажок "Запомнить меня" в вашей форме входа. Он не доступен в форме CreateUserWizard по умолчанию, но вы можете добавить к нему флажок в своем шаблоне, если хотите.

Если вы не хотите, чтобы пользователь регистрировался автоматически, удалите строку FormsAuthentication.SetAuthCookie() из вашего кода и соответствующим образом установите свойства CreateUserWizard. Если вы хотите одобрить пользователей, прежде чем они смогут войти в систему, установите DisableCreatedUser="true". Это предотвратит их вход в систему до тех пор, пока вы не установите пользователя IsApproved=true из модуля .Net Users в диспетчере IIS или у вас есть пользовательская веб-страница, чтобы утверждать пользователей.

Вы все равно можете добавить пользователя в соответствующую роль, когда пользователь создан без необходимости их регистрации:

if (!Roles.IsUserInRole(RegisterUser.UserName, "Test"))
{  
    Roles.AddUserToRole(RegisterUser.UserName, "Test");
}

Ответ 2

После того, как вы создадите пользователя, вы хотите, чтобы они вошли в систему сразу, правильно? Если это так, вы бросаете файл cookie, который используется asp.net, чтобы определить, аутентифицирован ли пользователь (отличается от разрешенного). "False" означает, что он не является постоянным (эквивалентно опции "Запомнить меня?" В форме входа в систему.

Что касается вашего пользователя NULL, я бы предложил разместить точку останова прямо перед вызовом GetUser и запросить ваше хранилище данных пользователя, чтобы узнать, действительно ли он там.