2016-04-28 10 views
0

ist, würde ich fragen, warum UserId null ist (im Code unten) nach der Benutzeranmeldung.Warum Benutzer null

OR

Ich brauche Benutzer umleiten auf die sie Rollen abhängig. Ich muss es so einfach wie möglich machen.

// POST: /Account/Login 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     // This doesn't count login failures towards account lockout 
     // To enable password failures to trigger account lockout, change to shouldLockout: true 
     var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
     switch (result) 
     { 
      case SignInStatus.Success: 
       string UserId = User.Identity.GetUserId(); <------ HERE 
       HelpRoles hr = new HelpRoles(); 
       returnUrl = hr.CheckUserRoleAndRedirect(UserId); 
       return RedirectToLocal(returnUrl); 

Antwort

4

Das User-Objekt basiert auf den entschlüsselten Cookies, nachdem die Anforderung authentifiziert wird, und diese Cookies nicht bis zur nächsten Anforderung gesetzt, so dass die Seite aktualisiert werden muss, bevor User.Identity nicht null ist.

Für weitere Informationen, see this post.

Um dies zu umgehen, können Sie im Erfolgsfall den Benutzer aus der Datenbank mit der E-Mail-Adresse abrufen und stattdessen die ID verwenden.

1

Wie John Mc gesagt hat, um dieses zu arbeiten, müssen Sie den Benutzer im Erfolgsfall erhalten. So könnten Sie so etwas wie dies wollen, bevor UserId

var user = userManager.Find(model.UserName, model.Password); 

oder

var user = userManager.FindByEmail(model.Email); 

oder

var user = userManager.FindByName(model.Username); 

EDIT

In diesem Fall bekommen Sie müssen nicht verwenden Ihre Methode wie unten gezeigt string UserId = User.Identity.GetUserId(); < ------ HIER

denn sobald man sich die user object Sie können in das ID-Feld erhalten wie user.Id