2009-08-18 10 views
1

fewtutorialsを使用して認証を設定しようとしています。ASP.NET v2.0のメンバーシッププロバイダのパラダイムにあります。私はチュートリアルの例に従ってきましたが、FormsAuthentication.RedirectFromPageメソッドを適切に動作させるように見えません。ログインを試みると、ユーザーの資格情報はMembership.ValidateUserで確認されますが、ページはDefault.aspxではなくLogin.aspxに送り返されます。ここに私のweb.configファイルから関連するスニペットは、次のとおりです。ASP.NET SqlMembershipProvider無限ループ?

... 
<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" protection="All" timeout="60" name="POTOKCookie" requireSSL="false" path="/FormsAuth" 
     slidingExpiration="true" cookieless="UseCookies" enableCrossAppRedirects="false" defaultUrl="~/Default.aspx"/> 
</authentication> 
<authorization> 
    <deny users="?" /> 
</authorization> 
... 
<membership defaultProvider="CustomizedProvider"> 
    <providers> 
    <clear /> 
    <add name="CustomizedProvider" 
     type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     connectionStringName="LoginDB2" 
     applicationName="POTOK" 
     minRequiredPasswordLength="5" 
     minRequiredNonalphanumericCharacters="0" /> 
    </providers> 
</membership> 

私は(Membership.ValidateUserがうまく動作しているようだので)私の接続文字列が正しいことを確認しましたとのためのASP.NETログインコントロールを使用していますLogin.aspxページのUI。私は、URLにアクセスすると

Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate 
    If (Membership.ValidateUser(Login1.UserName, Login1.Password)) Then 
     FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet) 
    End If 
End Sub 

http://localhost/Project)私が取られています:ここでは認証のイベントハンドラのコードでhttp://localhost/Project/Login.aspxと「ログイン」した後は、私のURLは次のとおりです。http://localhost/Project/Login.aspx?ReturnUrl=%2fProject%2fDefault.aspx

私は設定手順を欠場します?

答えて

1

問題はpath = "/ FormsAuth"パラメータにあります。 この変数を削除し、パスはMSDNから

間違っていることができる理由について、再び

Read this postを試してみてください。 パス - オプションの属性を。アプリケーションによって発行されたCookieのパスを指定します。ほとんどのブラウザでは大文字と小文字が区別され、パスの大文字と小文字の不一致がある場合はクッキーを返さないため、デフォルトはスラッシュ(/)です。

注:path属性では大文字と小文字が区別されます。したがって、パス属性の値を/ application1に設定し、アプリケーション名がApplication1の場合、認証Cookieパスは/ application1になります。

したがって、pathプロパティを使用する場合は、Projectがアプリケーションの名前であるため(これはわかっている限り)、「/ project」に設定する必要があります。しかし、私はあなたが別のクッキー名(すなわち、このアプリケーションでは "POTOKCookie"という名前)を使用すると、別のパスを持つ必要はないと思います。

PRB: Forms Authentication Requests Are Not Directed to loginUrl Page

+0

前の回答は削除されませんでした。有効なので、ASP.NETメンバーシップでLoginコントロールを使用する認証イベントのコードを書く必要はありませんが、問題の実際の原因ではありませんでした。問題はクッキーにありました。 –

0

ASP.NETのメンバーシップでLoginコントロールを使用する場合、認証を実行するコードを記述する必要はありません。ただし、独自の認証ロジックを作成する場合は、LoginコントロールのAuthenticateイベントを処理し、カスタム認証コードを追加することができます。

Login1_Authenticateイベントは、二重機能を実行する限り削除することをお勧めします。コントロール自身がValidateUserとリダイレクトを呼び出す責任があるためです。

また、あなたがDestinationPageUrlプロパティの値を指定しない場合、ユーザーは元のページに正常にログイン後に要求されたユーザーをリダイレクトされますログイン制御

のDestinationPageUrlプロパティを確認してください。だからあなたの場合には、このプロパティを設定しないでください。

+0

Login1_Authenticateイベントを削除し、DestinationPageUrlプロパティが指定されていないことを確認して、同じ動作を取得しています。 – toddk