2017-09-07 4 views
0

Ich arbeite an einem .NET Core 1.1 ASP.NET App mit Cookies Authentifizierung und ich bemerkte etwas ein bisschen komisch. Ich bemerke, dass, wenn ich meine Login Seite treffe, es sagt, dass ich nicht authentifiziert werde, auch wenn das das einzige Ding ist, das die Handlung tut. Wenn ich die Seite aktualisiere oder zu einer anderen Seite navigiere, werde ich authentifiziert. Es scheint fast, als ob die Ansicht zurückgegeben wird, bevor die asynchrone Anmeldung erfolgt.ASP.NET Core-Seite gibt vor der Anmeldung

Controller-Methode

public async Task<IActionResult> Login() 
{ 
     ClaimsPrincipal userPrincipal = new ClaimsPrincipal(/*Setup the principal*/); 

     await HttpContext.Authentication.SignInAsync("Cookie", userPrincipal, new AuthenticationProperties 
     { 
      ExpiresUtc = DateTime.UtcNow.AddMinutes(5), 
      IsPersistent = false, 
      AllowRefresh = false 
     }); 

    return View(); 
} 

Ansicht

@if (this.User.Identity.IsAuthenticated == true) 
{ 
    <span>You're authenticated!</span> 
} 
else 
{ 
    <span>You're not authenticated.</span> 
} 

Wenn ich /Controller/Login navigieren ich, dass ich nicht authentifiziert bin, aber wenn ich mit dem gleichen Code zu einer anderen Ansicht gehen es wird dann sagen, dass ich authentifiziert bin. Das ist kein großes Problem, aber ich mache mir Sorgen, dass ich etwas falsch eingerichtet habe.

Antwort

1

Dies ist von Entwurf. Sie müssen eine Umleitung wie RedirectToAction nach dem Aufruf an SignInAsync durchführen, da das Benutzerobjekt erst bei der nächsten Anforderung an den Server rekonstruiert wird.

+0

Interessant, danke! Gibt es Unterlagen dazu? –

+0

Ich habe keinen Link zur offiziellen Dokumentation dafür, aber es macht einfach Sinn, da User.Identity für die aktuelle Anfrage ist und SignInAsync die Antwort so modifiziert, dass der neu erstellte Cookie mit der nächsten Anfrage gesendet wird. – jcemoller

Verwandte Themen