[英]ASP.NET Login control, login with e-mail but e-mail is not the username (how to)?
使用ASP.NET表單身份驗證,您將如何接受電子郵件地址和密碼,使用電子郵件地址查找用戶名,然后使用查找的用戶名和密碼登錄?
我們有這個卡系統,有員工編號,但沒有人能記住他們的號碼。 顯而易見的是使用登錄的電子郵件地址,但應用程序的其余部分取決於用戶名是員工編號。
謝謝。 代碼鏈接/示例會很棒。
我們當前的C#解決方案以以下引用異常結束:
Response.Write(Membership.GetUser().UserName);
但這兩個都很好:
string userName = Membership.GetUserNameByEmail(emailAddress);
bool successfulLogin = Membership.ValidateUser(userName, password);
不要更改現有的登錄控件,只需覆蓋“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;
}
不要使用登錄控件。 只需將自己的文本框放在那里,然后執行自己的身份驗證邏輯。 如果用戶通過,請調用FormsAuthentication.RedirectFromLoginPage
。
只要您可以從他們的電子郵件中查看,這將記錄他們而無需他們輸入他們的用戶名。
查看文檔 。
我有完全相同的問題。 在后續頁面加載時,這很好用:
Response.Write(HttpContext.Current.User.Identity.Name);
但這告訴我當前用戶為null:
Response.Write(Membership.GetUser().UserName);
這是我的解決方案,對我而言, 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.