2013-04-01 56 views
1

當前在我的應用程序中,使用ASP.Net成員資格提供程序和ASP.Net默認登錄頁面驗證用戶僅包含用戶名和密碼。這對這兩個領域工作正常。但根據我當前的要求,需要在ASP.Net登錄頁面中將額外的字段「公司」顯示爲下拉列表,並使用ASP.NET成員資格提供程序驗證三個公司,用戶名和密碼。這是否可能,使用ASP.Net成員資格提供程序自定義ASP.Net登錄頁面,並添加額外字段?你可以給我一些想法,我怎麼可以接近?ASP.NET成員資格 - 爲ASP.Net添加額外字段登錄頁面

回答

1

成員資格提供者的ValidateUser方法只接受兩個參數 - 用戶名和密碼。即使你重寫它,也不能傳遞三個參數。

ValidateUser(string username, string password) 

基本上,您不能使用登錄控件來驗證用戶。相反,你想自己驗證用戶。下面是一個示例代碼 -

enter image description here

注:我在演示目的登錄控制去掉代碼。

<asp:Login ID="LoginUser" runat="server" OnAuthenticate="LoginUser_Authenticate"> 
    <LayoutTemplate> 
     <asp:TextBox ID="UserName" runat="server" /> 
     <asp:TextBox ID="Password" runat="server" TextMode="Password" /> 
     <asp:DropDownList ID="CompanyDropDownList" runat="server"> 
      <asp:ListItem Text="One" Value="1" /> 
      <asp:ListItem Text="Two" Value="2" /> 
     </asp:DropDownList> 
     <asp:Button ID="LoginButton" runat="server" CommandName="Login" 
     Text="Log In" ValidationGroup="LoginUserValidationGroup" /> 
    </LayoutTemplate> 
</asp:Login> 

protected void LoginUser_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    var companyName = LoginUser.FindControl("CompanyDropDownList") 
     as DropDownList; 

    if(MyValidateUser(LoginUser.UserName, LoginUser.Password, 
     companyName.SelectedValue)) 
    { 
     FormsAuthentication.SetAuthCookie(LoginUser.UserName, false); 

     // Do something 
    } 
} 

請確保您使用新ASP.NET Universal Providers

+0

謝謝...我已經嘗試過這種方式,但面臨CompanyDropDownList存在一些問題,通過使用Login.FIndControl方法檢索選定的下拉項目。而且我的要求超出了此功能,切換到公司數據庫並驗證用戶。所以我想用自定義登錄頁面實現Forms身份驗證並切換到公司數據庫,最後驗證用戶並允許訪問授權頁面。任何如何謝謝你的建議,這有助於學習新事物。 – venkat

0

您可以使用Profile Provider進行此操作。

或者,您可以創建自己的表來存儲其他用戶相關信息。這是一個更復雜的工作,因爲您正在創建自己的表並創建代碼以從這些表中獲取數據並將數據保存到這些表中,但是我發現使用這種方式的自定義表可以提供更大的靈活性和更好的可維護性(特別是默認的配置文件提供程序SqlProfileProvider,它以低效,非規範化的方式存儲配置文件數據)。

看一下這個教程,你可以在這裏找到這個過程的步驟:存儲其他用戶信息。

+0

謝謝...不提供教程鏈接。你能否提供相同的答案? – venkat

+0

不要忘記接受我的答案:http://www.asp.net/web-forms/tutorials/security/membership/storing-additional-user-information-cs – Nathan