簡體   English   中英

ASP.NET登錄控件,用電子郵件登錄但電子郵件不是用戶名(如何)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM