Wie aktualisiert man security stamp
wenn Benutzer abmelden?Wie wird der Sicherheitsstempel aktualisiert, wenn der Benutzer sich abmeldet?
ist es möglich, security stamp
zu aktualisieren, wenn Benutzer abmelden?
mein Code:
public class SignInManager : SignInManager<User>, ISignInManager
{
// other
public override async Task SignOutAsync()
{
await _userManager.UpdateSecurityStampCurrentUserAsync();
await base.SignOutAsync();
}
}
public async Task<IdentityResult> UpdateSecurityStampCurrentUserAsync()
{
return await UpdateSecurityStampAsync(GetCurrentUser());//error
}
public User GetCurrentUser()
{
if (_httpContextAccessor.HttpContext.User == null)
{
return null;
}
var userId = Guid.Parse(_httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);
return currentUser ?? (currentUser = _users.First(d => d.Id == userId));
}
Fehler:
Die Instanz des Entity-Typ ‚Benutzer‘ kann nicht verfolgt werden, da eine andere Instanz dieses Typs mit dem gleichen Schlüssel bereits verfolgt wird. Bei neuen Entitäten sollten Sie einen IIdentityGenerator verwenden, um eindeutige Schlüsselwerte zu generieren.
ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<DotNetContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DotNetConnection")));
services.AddIdentity<User, Role>()
.AddEntityFrameworkStores<DotNetContext, Guid>()
.AddUserManager<UserManager>()
.AddRoleManager<RoleManager>()
.AddUserStore<UserStore>()
.AddDefaultTokenProviders();
services.AddMvc();
// Services
services.AddScoped<IUserManager, UserManager>();
services.AddScoped<IRoleManager, RoleManager>();
services.AddScoped<ISignInManager, SignInManager>();
services.AddScoped<IUserStore, UserStore>();
}
In 'GetCurrentUser': warum nicht einfach zurückgeben' _httpContextAccessor.HttpContext.User'? Warum versuchen Sie, denselben Benutzer aus der Datenbank erneut zu laden? – Dmitry
weil: kann nicht von 'System.Security.Claims.ClaimsPrincipal' zu 'Data.Entities.Identities.User' konvertiert werden – StackOverflow4855
Haben Sie versucht [vorhanden] (https://github.com/aspnet/Identity/blob/1.0.0 -rc2/src/Microsoft.AspNetCore.Identity/UserManager.cs # L347) 'UserManager.GetUserAsync (ClaimsPrincipal Principal)' anstatt eigene Implementierung zu schreiben? – Dmitry