用户通过身份登录帐户“A”
signInManager.PasswordSignInAsync(UserName, Password, false, lockoutOnFailure: true);
这就是我正在执行注销的方式
await signInManager.SignOutAsync();
它工作正常,但当我想“抛出”当前用户在其他帐户 - 帐户“B”
await signInManager.SignInAsync(user, true);
然后它不起作用,用户仍然在他的“上一个”“A”帐户
即使我表演
await _signInManager.SignOutAsync();
await signInManager.SignInAsync(user, true);
然后我的用户仍然在他的“上一个”“A”帐户。
总而言之,这很奇怪,因为它在过去的 X 个月里工作了,我不知道出了什么问题,因为没有错误。
基本上使用
await _signInManager.SignOutAsync();
单独工作正常,但与 SignIn 一起使用不会.
甚至表演
foreach (var cookie in Request.Cookies.Keys)
{
Response.Cookies.Delete(cookie);
}
在 SignIn 没有帮助之前
编辑
这是我如何注册和配置身份:
services.AddEditedDefaultIdentity<User>
(
o =>
{
o.Password.RequireDigit = true;
o.Password.RequireLowercase = true;
o.Password.RequireUppercase = true;
o.Password.RequireNonAlphanumeric = true;
}
)
.AddSignInManager()
.AddEntityFrameworkStores<Context>();
services.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = "/Login";
options.Cookie.Name = "MyApp";
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(600);
options.LoginPath = "/Login";
options.LogoutPath = "/Logout";
options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
options.SlidingExpiration = true;
});
public static IdentityBuilder AddEditedDefaultIdentity<TUser>(this IServiceCollection services, Action<IdentityOptions> configureOptions) where TUser : class
{
services.AddAuthentication(o =>
{
o.DefaultScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies(o => { });
return services.AddIdentityCore<TUser>(o =>
{
o.Stores.MaxLengthForKeys = 128;
configureOptions?.Invoke(o);
})
.AddDefaultTokenProviders();
}
2 回答
这是一个适合我的工作演示:
解:
出现问题是因为身份正在创建**两个带有会话 ID 的用户的 cookie?用户?不确定
但出于某种原因,他们有不同的路径
所以,
我正在登录账户 A.
它正在为帐户 A 创建 cookie
我在账户 B 上“自我投掷”/“登录”
它正在为帐户 B 创建 cookie
我正在进入[3]端点
它首先读取?帐户 A 的 cookie
然后我删除了帐户的 A cookie
刷新页面
现在我在账户 B.
所以我必须尝试修复那些创建的 cookie 的路径。
编辑
固定: