2016-06-15 1 views
3

J'essaie de porter une application Web MVC5 sur Linux MonoDevelop.Mono MVC5 User.Identity.IsAuthenticated renvoie false après la connexion avec FormsAuthentication.SetAuthCookie()

Le site utilise FormsAuthenication, donc sur l'action de connexion I cal SetAuthCookie() et sur mes contrôleurs AuthorizeAttribute pour s'assurer que seuls les utilisateurs connectés accèdent à la fonctionnalité.

Tout cela fonctionne bien sous Windows!

Après le portage en Mono et le débogage avec MonoDevelop, je vois qu'il ne fonctionne pas. En effet, après une connexion réussie, l'utilisateur est de nouveau redirigé vers la page de connexion.

J'ai essayé de supprimer l'attribut [Authorize] de HomeController, juste pour vérifier ce qui se passe et j'ai réalisé que - en action HomeController - le User.Identity.IsAuthenticated renvoie false. Je suppose que c'est pourquoi je reçois la redirection à Login.

Mais pourquoi est-ce que User.Identity.IsAuthenticated renvoie false?

J'ai vérifié que SetAuthCookie() sur windows crée un cookie .ASPXAUTH dans le contexte http. Sous Linux, il crée un cookie .MONOAUTH dans le contexte http. J'ai essayé de configurer le nom du cookie dans web.config par:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" name=".ASPXAUTH" /> 
</authentication> 

Mais cela ne fonctionne pas ...

MISE À JOUR j'ai réalisé que, sur mono, le SetAuthCookie() exécute succesfuly MAIS le cookie n'est pas là (en utilisant la gestion des cookies de Firefox). Pourtant, lors du débogage, la collection Response.Cookies incorpore le cookie .ASPXAUTH. Il semble qu'il ne puisse pas être généré sur le client.

Répondre

2

Vérifiez si le FormsAuthentication.SignOut() est appelé dans votre code.

J'ai eu un problème similaire en mono et cela était dû à une différence dans le cycle de vie du cookie, qui a provoqué un appel indésirable à FormsAuthentication.SignOut() et a détruit le cookie .ASPXAUTH avant qu'il ne soit réellement créé.

+0

Incroyable! Merci, c'était exactement le cas pour moi aussi. J'ai eu un autre cookie -B- initialisé avec le cookie .ASPXAUTH. B-cookie, n'a pas été ajouté instantanément sur le HttpRequest, causant ainsi une fonction, qui vérifiait l'existence de B exactement là, pour appeler FormsAuthentication.SignOut() et tuer mon cookie .ASPXAUTH. – cnom