2016-05-19 17 views
1

NET MVC 5 einfacher Mitgliedschaftsanbieter. Wenn ich meinen Benutzer erstelle, wenn alles in Ordnung ist, habe ich ihn eingeloggt, später möchte ich Informationen über ihn finden. Aber ich kann den angemeldeten Benutzer nicht erreichen. Dies ist mein Code:Warum kann ich meinen derzeitigen Benutzer nicht erreichen, nachdem ich mich angemeldet habe?

[AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Register(RegisterViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
      var result = UserManager.Create(user, model.Password); 
      if (result.Succeeded) 
      { 

       SignInManager.SignIn(user, isPersistent: false, rememberBrowser: false); 
       var id = User.Identity.GetUserId(); 

Also, wenn ich das Debuggen und gehen Sie auf die User.Identity.GetUserId(); seiner Null. Check it out:

enter image description here

enter image description here

+2

Sie kennen bereits die Benutzer-ID: 'user.Id'. 'User.Identity' betrachtet die Eigenschaften der Anfrage, und da sie noch nicht festgelegt wurden, werden Sie als nicht authentifiziert betrachtet. Bei der ** next ** -Anfrage vom Client werden die richtigen Bits aufgefüllt, da der Cookie auf dem Client gesetzt wird. –

+0

@ BrendanGreen Eigentlich hilft das. Weißt du, wieso ist das in der nächsten Anfrage, die ich die Bits bevölkert habe? –

Antwort

0

Ihre SignIn Methode ein Cookie und speichern Informationen über aktuelle protokollierte Identität schaffen müssen. Deshalb müssen Sie es in einer anderen Anfrage ausführen, bevor Sie Informationen über den Benutzer erhalten. Cookie wird dann erstellt/zuerst aktualisiert

Für meinen Fall, ich beginne mit der Überprüfung, ob User.Identity.IsAuthenticated() ist wahr, dann ich den Benutzernamen mit User.Identity.Name abrufen. Dadurch wird das Zeichenfolgenformat zurückgegeben