Ответ 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");
}