2009-08-18 9 views
1

J'essaye de configurer l'authentification en utilisant un fewtutorials J'ai trouvé sur le paradigme de fournisseurs d'adhésion trouvé dans ASP.NET v2.0. J'ai suivi les exemples dans le tutoriel mais n'arrive pas à obtenir la méthode FormsAuthentication.RedirectFromPage pour fonctionner correctement. Lorsque je tente une connexion, les informations d'identification de l'utilisateur sont validées via Membership.ValidateUser mais la page est renvoyée à Login.aspx au lieu de Default.aspx. Voici l'extrait pertinent de mon web.config:ASP.NET SqlMembershipProvider Infinite Loop?

... 
<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> 

J'ai vérifié que ma chaîne de connexion est correcte (puisque Membership.ValidateUser semble fonctionner très bien) et je suis en utilisant le contrôle de connexion ASP.NET pour l'interface utilisateur sur ma page Login.aspx. Voici le code de gestionnaire d'événements Authentifier:

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 

Lorsque je visite l'url (http://localhost/Project) Je suis pris à: http://localhost/Project/Login.aspx et après le « login » mon URL est: http://localhost/Project/Login.aspx?ReturnUrl=%2fProject%2fDefault.aspx

Ai-je raté une étape de configuration ?

Répondre

1

Le problème est dans le paramètre path = "/ FormsAuth". Retirez cette variable et essayez à nouveau

Read this post sur les raisons de chemin peut être mal

De MSDN: chemin - attribut facultatif. Spécifie le chemin d'accès aux cookies émis par l'application. La valeur par défaut est une barre oblique (/), car la plupart des navigateurs sont sensibles à la casse et n'enverront pas de cookies en cas de conflit de cas de chemin.

REMARQUE: L'attribut de chemin est sensible à la casse. Par conséquent, si vous définissez la valeur de l'attribut de chemin sur/application1 et si le nom de l'application est Application1, le chemin d'accès du cookie d'authentification est/application1. Par conséquent, si vous souhaitez utiliser la propriété path, vous devez la définir sur "/ project" car Project est le nom de votre application (pour autant que je sache). Mais je ne pense pas que vous devez avoir des chemins différents lorsque vous utilisez différents noms de cookies (ie name = "POTOKCookie" dans cette application, j'espère sera différent des autres applications ASP.NET installées sur le même hôte)

Voir PRB: Forms Authentication Requests Are Not Directed to loginUrl Page

+0

Je n'ai pas supprimé ma réponse précédente, car elle est également valide, vous n'avez pas besoin d'écrire de code pour l'événement Authenticate vous utilisez le contrôle Login avec l'appartenance ASP.NET, mais ce n'est pas la source de votre problème. Le problème était avec les cookies. –

0

Si vous utilisez le contrôle de connexion avec l'appartenance ASP.NET, vous n'avez pas besoin d'écrire du code pour effectuer l'authentification. Toutefois, si vous souhaitez créer votre propre logique d'authentification, vous pouvez gérer l'événement Authenticate du contrôle de connexion et ajouter un code d'authentification personnalisé. Donc, je vous suggère de simplement supprimer l'événement Login1_Authenticate dans la mesure où il fait le double travail, je pense, parce que le contrôle lui-même est responsable de l'appel de ValidateUser et de la redirection.

propriété Vérifiez également DestinationPageUrl du contrôle de connexion

Si vous ne spécifiez pas de valeur pour la propriété DestinationPageUrl, l'utilisateur sera redirigé vers la page d'origine l'utilisateur a demandé Une fois connecté. Donc, dans votre cas ce la propriété ne doit pas être définie.

+0

J'ai supprimé l'événement Login1_Authenticate et vérifié que la propriété DestinationPageUrl n'était pas spécifiée et que j'obtenais toujours le même comportement. – toddk

Questions connexes