gefunden Wenn ich einen Benutzer mit dem folgenden Code registrieren:MVC - InvalidOperationException: UserId nicht
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.UserName };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
return View(model);
}
}
Ich bin in der Lage alle Ansichten mit dem [autorisieren] Attribut zuzugreifen. Allerdings, wenn ich abmelden und mit dem gleichen Benutzer ich mit
eine Fehlerseite zurückkommen in „InvalidOperationException: UserId nicht gefunden“
Der Fehler scheint aus meiner SignInAsync Funktion zu kommen an die Aussage:
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
ich füge keine Benutzer-ID und es gibt in dem Benutzer classs (seine Id) oder in der AspNetUsers Tabelle kein Benutzer-ID-Feld. Der Benutzer existiert in dieser Tabelle, aber es gibt auch keine UserId.
Ich habe versucht, die Cookies usw. zu löschen, aber immer noch kein Glück bei der Neuanmeldung. Mache ich das Register falsch? Ich verstehe nicht, warum die Authentifizierung nach dem UserId-Feld sucht, wenn es nicht zu existieren scheint
EDIT: Wenn ich beim ersten Mal anmelden ... bekomme ich die Fehlerseite. Wenn ich die Seite aber wieder öffne und den Cookie lese, habe ich Zugriff auf alles. Was zum Teufel geht mit dem ersten Login?
hier ist die SignInAsync Methode:
private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var _identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, _identity);
}
Aufnahme:
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
Können Sie Ihr Benutzermodell teilen? – Neshta
der Benutzer ist eine IPristinal-Implementierung. Ich denke, dass es gebacken ist. und das Benutzerobjekt ist ein IdentityUser – rigamonk
Könnten Sie uns die Implementierung der Methode SignInAsync (user, isPersistent: false) zeigen? –