2010-06-03 309 views
3

我在登錄過程中遇到問題。ASP.NET身份驗證問題

有些客戶抱怨說他們無法登錄。我可以在我們的日誌中看到他們的登錄成功,並且他們從登錄頁面重定向到成員區域。但是,不知何故登錄未被檢測到,並且他們被彈回到登錄頁面。

我已要求客戶檢查是否支持cookies(http://www.html-kit.com/tools/cookietester/),但問題仍然存在,即使此測試返回true。

這是怎麼了,我實現了登錄過程(simplyfied):通過在Page_Load中功能

protected void Login(string email, string password) 
{ 

FormsAuthentication.SignOut(); 


Guid clientId = /* Validate login by checking email and password, if fails display error otherwise get client id */ 


FormsAuthentication.SetAuthCookie(clientId.ToString(), true); 

HttpContext.Current.Response.Redirect("~/Members.aspx"); 


} 

在成員頁面我檢查認證:

public static void IsAuthenticated() 
{ 
if (!HttpContext.Current.User.Identity.IsAuthenticated) 
{ 
     HttpContext.Current.Response.Redirect("~/Login.aspx", true); 
} 
} 

也許我使用FormsAuthentication完全錯誤?

我已經問過這個,但還沒有能夠弄清楚這一點,我會很感激任何幫助。

從我的web.config:

<system.web> 
    <compilation debug="false"> 
     <assemblies> 
     ... 
     </assemblies> 
    </compilation> 
    <authentication mode="Forms"/> 
    <sessionState mode="InProc" cookieless="false" timeout="180"/> 
    <customErrors mode="On"/> 
    <httpHandlers> 
    ... 
    </httpHandlers> 
    <httpModules> 
    ... 
    </httpModules> </system.web> 
+0

你想念登錄頁面並拒絕所有用戶(請參閱我的回答)。 – Michel 2010-06-03 09:03:01

+0

請注意,當前登錄過程適用於大多數客戶(99%)。 – 2010-06-03 09:19:17

回答

1

單獨SignOut的()調用和SetAuthCookie()在不同的方法。當登錄頁面首次加載時,您可以撥打FormsAuthentication.SignOut(); - 只需在登錄頁面上遠離調用SignOut()即可。並在認證成功後致電 FormsAuthentication.SetAuthCookie(clientId.ToString(), true);

+0

試過但它沒有任何影響:( – 2010-06-03 09:31:57

2

公共靜態無效IsAuthenticated(){ 如果 (HttpContext.Current.User.Identity.IsAuthenticated!) { HttpContext.Current.Response.Redirect( 「〜/的Login.aspx」,真正的); } }

當您使用表單身份驗證時不是必需的。

當您指定在web.config中的窗體身份驗證(其中還指定登錄頁面)

<authentication mode="Forms"> 
    <forms loginUrl="/Authorization/Login" timeout="60" /> 
</authentication> 

,你拒絕所有非athenticated用戶訪問

<authorization> 
      <deny users="?" /> 
     </authorization> 

你不您不必親自檢查用戶的身份驗證,框架就會照顧到這一點。

我會放在FormsAuthentication.SignOut();代碼後面的「註銷」鏈接

+0

由於我有點奇怪的要求,我不能使用傳統的ASP.NET身份驗證...我堅持使用SetCookieAuth和Identity.IsAuthenticated。 – 2010-06-03 10:05:22

1

通常你會同時使用FormsAuthentication.Authenticate一些成員提供,但這應該工作,並在我的機器它實際上做。

您是否從註冊的HTTP模塊中刪除FormsAuthentication?通常情況下,這是在計算機範圍的web.config:

<configuration> 
    <system.web> 
    <httpModules> 
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> 
    </httpModules> 
    </system.web> 
</configuration> 

如果你把<clear />自己的web.config的同一部分內,你有效去除該模塊。

我測試過的Web.config很乾淨,它只配置了<authentication mode="Forms"/>

+0

沒有我的天堂請注意,問題並未影響到所有人 – 2010-06-03 10:01:55

+0

您如何執行登錄? – 2010-06-03 10:03:38