2009-08-21 4 views
1

Je travaille avec un fournisseur d'appartenance asp.net personnalisé en conjonction avec le contrôleur de compte par défaut fourni avec l'application exemple asp.net MVC. Tout se passe bien, sauf pour une chose minuscule: Après qu'un utilisateur crée un compte et est automatiquement connecté et redirigé, leur nom d'utilisateur ne s'affiche pas avec le message de bienvenue habituel.Le contrôle de connexion dans MVC n'affiche pas le nom d'utilisateur après la création de compte redirection

Je pensais que c'était peut-être parce qu'ils n'étaient pas connectés au moment où ils ont fait la demande. Une fois qu'ils se reconnectent, leur nom apparaît en haut, donc je ne pense pas que ce soit la faute des membres, mais je peux me tromper.

Le registre et rediriger méthode du contrôleur qui est livré avec asp.net MVC ressemble à ceci:

public ActionResult Register(string userName, string email, string password, string confirmPassword) 
{ 

    ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 

    if (ValidateRegistration(userName, email, password, confirmPassword)) 
    { 
     // Attempt to register the user 
     MembershipCreateStatus createStatus = MembershipService.CreateUser(userName, password, email); 

     if (createStatus == MembershipCreateStatus.Success) 
     { 
      FormsAuth.SignIn(userName, false /* createPersistentCookie */); 
      return RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
      ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus)); 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    return View(); 
} 

Ce utilise par la façon dont l'authentification par formulaire.

Editer: Voici la page principale utilisée par la page d'index. Il est le Site.master livré avec l'application par défaut asp.net MVC:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<div id="header"> 
     <div id="title"> 
      <h1>Internship Site</h1> 
     </div> 

     <div id="logindisplay"> 
      <% Html.RenderPartial("LogOnUserControl"); %> 
     </div> 

     <div id="menucontainer"> 

      <ul id="menu">    
       <li><%= Html.ActionLink("Home", "Index", "Home")%></li> 
       <li><%= Html.ActionLink("About", "About", "Home")%></li> 
      </ul> 

     </div> 
    </div> 

    <div id="main"> 
     <noscript>Your browser does not support JavaScript!</noscript> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 

     <div id="footer"> 
     </div> 
    </div> 
</div> 

Toute aide et compréhension grandement appréciées.

+0

est votre contrôle de connexion en utilisant AJAX affichée, et si oui, êtes-vous voir surtout ce problème dans IE? Il y a quelques astuces pour obtenir IE pour rafraîchir correctement les panneaux ajax parfois. –

+0

Je n'utilise pas actuellement AJAX. J'ai fait la plupart des tests dans Firefox. Bonne pensée cependant, j'ai déjà rencontré cela auparavant. –

Répondre

3

Vous avez raison. La raison pour laquelle le nom de l'utilisateur n'apparaît pas est qu'ils ne sont pas connectés au moment de la redirection vers la page d'accueil après la création du compte. Modifiez la ligne suivante:

FormsAuth.SignIn(userName, false /* createPersistentCookie */); 

à:

FormsAuth.SignIn(userName, true /* createPersistentCookie */); 
+0

Même lorsque je crée le cookie, j'obtiens le même résultat. –

+0

Vérifiez vos cookies puis. Avez-vous essayé de faire ce workflow avec des cookies nettoyés? – MunkiPhD

+0

Oui, je les efface avant chaque test. –

0

-je faire (au lieu de FormsAuth.SignIn())

if (Provider.ValidateUser(username, password) 
{ 
    FormsAuth.SetAuthCookie(username, rememberMe); 
} 

où me souviens est une variable indiquant la valeur du souvenez-vous de moi case à cocher (vrai, faux)

Modifier: Je viens de voir que c'est en enregistrement. J'utilise toujours le .SetAuthCookie, mais évidemment je ne fais pas le .ValidateUser (dans mon code d'enregistrement).

+0

Cela produit le même résultat malheureusement. –

+0

pouvez-vous afficher le code pour l'index de la maison que vous redirigez vers? –

+0

J'ai ajouté la page maquette utilisée par la vue d'index à mon article d'origine. La vue elle-même est juste un truc d'espace réservé. –

0

Le processus normal de validation de l'utilisateur et connexion automatique se passe comme suit:

 public ActionResult Login(string userName, string password, bool persistent, string returnUrl) 
    { 

     if (returnUrl != null && returnUrl.IndexOf("/user/login", StringComparison.OrdinalIgnoreCase) >= 0) 
      returnUrl = null; 

     if (Membership.ValidateUser(userName, password)) 
     { 
      FormsAuthentication.SetAuthCookie(userName, persistent); 

      if (!String.IsNullOrEmpty(returnUrl)) 
       return this.Redirect(303, returnUrl); 
      else 
       return this.Redirect(303, FormsAuthentication.DefaultUrl); 
     } 
     else 
      TempData["ErrorMessage"] = "Login failed! Please make sure you are using the correct user name and password."; 
     return View(); 
    } 
Questions connexes