2011-06-09 3 views
0

J'ai une application Web qui utilise des tickets d'authentification de formulaires personnalisés. Je me connecte en utilisant un mécanisme d'authentification personnalisé et en créant un ticket d'authentification personnalisé. À partir de l'application Web, je fais ensuite des appels Ajax réguliers à un contrôleur MVC2 pour demander si l'utilisateur est authentifié. La méthode du contrôleur ressemble à ceci:Le contrôleur ASP.NET MVC2 ne reconnaît pas le ticket d'authentification

public ActionResult GetAuthenticationStatus() 
     { 
      string responseDoc; 

      if (HttpContext.User != null 
       && HttpContext.User.Identity.IsAuthenticated) 
      { 
       responseDoc = "{\"status\":\"authenticated\"}"; 
      } 
      else{ 
       responseDoc = "{\"status\":\"unauthenticated\"}"; 
      } 

      return new ContentResult { Content = responseDoc, ContentType = "application/json" }; 

     } 

Les journaux IIS montrent que le cookie de ticket d'authentification arrive avec succès à IIS, mais ma méthode de commande retourne {\ « statut \ »: \ « unauthenticated \ »} si évidemment il semble que mes conditions de contrôleur pour vérifier l'authentification de l'utilisateur soient incorrectes. Bizarrement, tout fonctionne très bien dans Chrome. Cependant, cela ne fonctionne pas dans Safari mobile. Quelqu'un peut-il voir quelque chose de mal avec ma méthode de contrôleur?

Merci.

+0

Avez-vous essayé de définir un point d'arrêt dans cette action du contrôleur et de vérifier le retour de votre fournisseur d'authentification personnalisé? – Lazarus

+0

@Lazarus - il se produit uniquement dans Safari mobile, que je ne peux pas exécuter sur mon PC de développement, donc je ne peux pas reproduire localement. – Journeyman

+0

sont les cookies activés dans ce mobile Safari? –

Répondre

0

Je crois avoir la réponse. Vous devez définir spécifiquement web.config pour forcer l'utilisation des cookies. Mon paramètre d'authentification dans web.config ressemble maintenant à ceci:

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" 
      cookieless="UseCookies" 
      /> 
    </authentication> 

Il est le cookieless = entrée « usecookies » qui a résolu le problème. La valeur par défaut pour ceci est UseDeviceProfile. Il doit avoir été le cas qu'un iPad n'a pas un régime UseDeviceProfile cohérent.

Questions connexes