Ich arbeite an einer einseitigen Anwendung mit AngularJS und ASP.NET Identity 2. Ich logge den Benutzer ein und der Cookie wird gesetzt; Wenn ich jedoch die Identität des Benutzers auf der gleichen Anfrage überprüfe, zeigt es es als leer und IsAuthenticated ist falsch. Diese werden jedoch bei nachfolgenden Anforderungen ausgefüllt. Ich hatte gehofft, zurück zur Benutzerschnittstelle zu senden, ob der Benutzer auf der gleichen Anfrage eingeloggt war oder nicht. Ist das möglich?ASP.NET Identity aktualisiert keine Identitätsinformationen auf derselben Anfrage
-Code wie gewünscht (AngularJS macht AJAX Post in WebAPI Controller Login-Methode)
[HttpPost]
[AllowAnonymous]
[Route("Login")]
public async Task<IHttpActionResult> Login(LoginModel loginModel)
{
var result = await _securityService.Login(loginModel.UserName, loginModel.Password);
if (!result)
{
ModelState.AddModelError("errorMessage", "Invalid username or password.");
return BadRequest(ModelState);
}
return Ok();
}
public async Task<bool> Login(string userName, string password, bool persistCookie = false)
{
var user = await _userManager.FindAsync(userName, password);
if (user != null)
await SignInAsync(user, persistCookie);
else
return false;
return true;
}
private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
_authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
_authenticationManager.SignIn(new AuthenticationProperties() {IsPersistent = isPersistent}, await CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie));
}
public Task<ClaimsIdentity> CreateIdentity(ApplicationUser user, string authenticationType)
{
return _userManager.CreateIdentityAsync(user, authenticationType);
}
-Code hilfreich sein würde. – Stilgar
Code hinzugefügt, hoffe es hilft! BTW, obwohl ich AuthenticationMode.Active einstellen könnte in irgendeiner Form helfen, aber das hat nicht geholfen! – Todd
Wenn ich dieses Recht verstehe, ist die Identitätsinformation leer, es sei denn, die Anfrage enthält ein Cookie (oder Token). Aber ich würde erwarten, dass dies vom Authentifizierungsmanager bei der Anmeldung festgelegt wird? Vielleicht ist das unmöglich? – Todd