Не требуется пароль для регистрации пользователя в приложении MVC 3 - PullRequest
2 голосов
/ 11 декабря 2011

Я работаю над приложением, которое требует только имя пользователя для регистрации, а не пароль. В дальнейшем, когда пользователь создаст «полную» учетную запись, мы попросим его ввести пароль. Доступна ли эта возможность в модели членства .NET или мне нужно будет развернуть собственное решение? Очевидно, я хотел бы сделать имя пользователя уникальным.

Спасибо!

1 Ответ

2 голосов
/ 11 декабря 2011

Я сделал нечто подобное при создании сайта MVC 3, который позволяет пользователям входить в систему со своими учетными данными Facebook. Если приходит новый пользователь и выбирает Login with Facebook, я просто создаю для него новый акцент, но не заставляю его вводить пароль.

Обычно, если вы используете стандартный членский состав .NET, вы делаете это (среди прочего) в действии Register:

MembershipCreateStatus createStatus = _membershipService.CreateUser(model.UserName, model.Password, model.Email);

Я решил создать какой-то случайный пароль (например, просто сгенерировать новый Guid и ToString() it), например:

model.Password = Guid.NewGuid().ToString();

Теперь у нас есть ситуация, когда у человека есть пароль, но никто в мире не знает, что это такое . Это не имеет значения для моего случая, поскольку они входят в систему с помощью Facebook. Однако, если они хотят прервать соединение с Facebook, они могут просто щелкнуть ссылку Forgotten Password, и я сгенерирую ссылку, которая будет отправлена ​​им по электронной почте, из которой они смогут выбрать новый пароль, так что все хорошо.

Если вы хотите знать, как создать новый пароль, не зная старого, вот как вы можете сделать это в стандартном поставщике членства .NET:

   public bool ResetPassword(string userName, string newPassword)
    {
        try
        {
            MembershipUser user = _provider.GetUser(userName, true);
           // Create a new password and store it for a moment
           string resetPassword = user.ResetPassword();
           // Now set the new password, for which we need that new one we just generated...
           return user.ChangePassword(resetPassword, newPassword);           
        }
        catch
        {
            return false;
        }
    }
...