ASP.NET Контроль входа в систему, вход в систему с помощью электронной почты, но электронная почта не является именем пользователя (как это сделать)? - PullRequest
3 голосов
/ 22 сентября 2009

Используя аутентификацию на основе форм ASP.NET, как бы вы приняли адрес электронной почты и пароль, использовали адрес электронной почты, чтобы найти имя пользователя, а затем войти в систему с помощью поиска имени пользователя и пароля?

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

Спасибо. Код ссылки / примеры будет здорово.

Наше текущее решение C # заканчивается исключением нулевой ссылки на:

Response.Write(Membership.GetUser().UserName);

но оба они работают нормально:

string userName = Membership.GetUserNameByEmail(emailAddress);
bool successfulLogin = Membership.ValidateUser(userName, password);

Ответы [ 4 ]

10 голосов
/ 22 сентября 2009

Не меняйте существующий элемент управления входом в систему, просто переопределите событие 'Authenticate' , чтобы выполнить новую пользовательскую логику. Также функция FormsAuthentication.SetAuthCookie () должна помочь вам преодолеть проблемы с именем пользователя.

Я не скомпилировал это, но вы должны понять:

private void OnAuthenticate(object sender, AuthenticateEventArgs e)
{
    bool successfulLogin = false;
    string userName = Membership.GetUserNameByEmail(Login1.UserName); //the email address
    successfulLogin = Membership.ValidateUser(userName, Login1.Password);

    if(successfulLogin)
      FormsAuthentication.SetAuthCookie(userName, true);

    e.Authenticated = successfulLogin;
}
3 голосов
/ 22 сентября 2009

Не используйте контроль входа в систему. Просто поместите свои собственные текстовые поля и выполните свою собственную логику аутентификации. Если пользователь проходит, позвоните FormsAuthentication.RedirectFromLoginPage.

Это позволит войти в систему без необходимости ввода имени пользователя, если вы можете посмотреть его по электронной почте.

См. документы .

1 голос
/ 22 сентября 2009

У меня точно такая же проблема. На последующих загрузках страницы это работает нормально:

Response.Write(HttpContext.Current.User.Identity.Name);

Но это говорит мне, что текущий пользователь является нулевым:

Response.Write(Membership.GetUser().UserName);
0 голосов
/ 04 января 2012

Это мое решение и для меня все в порядке, LoginUser - это имя элемента управления для входа.

protected void LoginUser_Authenticate(object sender, AuthenticateEventArgs e)
{
    bool successfulLogin = false;
    string userName = Membership.GetUserNameByEmail(LoginUser.UserName); //the email address
    LoginUser.UserName = userName; //+++ Set username recovered by email. 
    successfulLogin = Membership.ValidateUser(userName, LoginUser.Password);

    if (successfulLogin)
        FormsAuthentication.SetAuthCookie(userName, true);

    e.Authenticated = successfulLogin;
}
...