2009-10-17 42 views
2

我有一個簡單的問題,讓我頭疼幾天。asp.net身份驗證 - 從web.config使用憑據 - 問題

我用登錄控件創建了非常簡單的應用程序。我保持用戶數據在web.config文件:

<authentication mode="Forms"> 
    <forms name=".RzeskoLoginCookie"> 
     <credentials passwordFormat="Clear"> 
      <user name="test" password="test"/> 
     </credentials> 
    </forms> 
</authentication> 

我將部署這個簡單的網站到IIS上,我不想使用SQL Server的計算機上。

我的登錄按鈕事件看起來是這樣的:

protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e) 
{ 
    if(FormsAuthentication.Authenticate(Login1.UserName, Login1.Password)) 
    { 
     FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet); 
    } 
} 

現在的問題:

當我上運行內置的Web服務器VS2008網站,一切工作正常(我可以登錄)。當我將網站複製到IIS我經常收到這惱人的錯誤(後我點擊登錄按鈕):

無法生成 SQL Server的用戶實例由於未能在 檢索用戶的本地 應用程序數據路徑。請確保用戶在計算機上擁有本地用戶配置文件 。連接將關閉 。

我還觀察到在我的App_Data文件夾中正在創建一些奇怪的文件。

總結。我想要實現的是使用web.config文件中的用戶憑據,而不使用sql server。

我想感謝所有幫助

親切的問候 PK

回答

4

MSDN頁面登錄控制:

*

Login控件使用會員 提供商獲取用戶憑證。 除非另有說明,否則 登錄控件將使用 Web.config文件中定義的默認 成員資格提供程序。要指定一個 不同的提供程序,請將 MembershipProvider屬性設置爲應用程序的Web.config文件中定義的成員提供程序名稱 之一 。 欲瞭解更多信息,請參閱會員 供應商。

*

的默認成員資格提供程序是AspNetSqlProvider它使用一個SQL Server數據庫作爲其用戶存儲。

如果要提供自定義身份驗證例程,您可以編寫自己的自定義成員資格提供程序,也可以處理Login控件的OnAuthenticate方法以提供自己的身份驗證邏輯。

+0

那麼爲什麼在測試服務器上一切正常?用戶憑證是從web.config中讀取的? – pkolodziej

+0

但是,您指定了哪個提供程序以使其使用web.config中的憑據? – NickG

1

如果您在代碼中注意到,你有方法聲明爲處理<asp:Login>控制的LoggingIn事件:

protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e) 

與ASP.NET成員資格提供該控制界面這可能是爲什麼它正在尋找連接字符串。

因此,而不是使用<asp:Login>控制,只需使用一個按鈕,處理Click事件,因此不存在使用會員的:

<asp:Button id="LoginButton" Text="Login" OnClick="Login_OnClick" runat="server" /> 

後面的代碼(注意方法的不同簽名):

public void Login_OnClick(object sender, EventArgs args) 
{ 
    if(FormsAuthentication.Authenticate(Login1.UserName, Login1.Password)) 
    { 
     FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet); 
    } 
} 
+0

它在可視化開發服務器上工作,但在IIS中發佈時仍然有相同的錯誤...它仍然嘗試使用默認成員資格和sqlprovider(並連接到sql數據庫),即使我使用我自己的事件像你所做地。 – Horaceman

0

好的,謝謝大家指出的解決方案。 我終於設法通過創建我自己的身份驗證事件(與登錄控件關聯)來避免該錯誤。