Что делает FormsAuthentication.SetAuthCookie - PullRequest
16 голосов
/ 21 августа 2011

Я использую элемент управления 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() равно нулю.

Ответы [ 2 ]

16 голосов
/ 21 августа 2011

У вас есть 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");
}
1 голос
/ 21 августа 2011

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

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

...