首页 文章

如何在用户登录他的同时登录其他帐户?

提问于
浏览
1

用户通过身份登录帐户“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 回答

  • 0

    这是一个适合我的工作演示:

    public async Task<IActionResult> SignInAnother()
    {
        //A sign in with username and password
        var AsignInResult = await _signInManager.PasswordSignInAsync("tony@outlook.com","1qaz@WSX", false, true);
        //A sign out
        await _signInManager.SignOutAsync();
        //query identity user by username
        var username = "test@outlook.com";
        var user = await _userManager.FindByNameAsync(username);
        //sign in user
        await _signInManager.SignInAsync(user, isPersistent: true);
        return RedirectToAction("Index");
    }
    
  • 0

    解:

    出现问题是因为身份正在创建**两个带有会话 ID 的用户的 cookie?用户?不确定

    但出于某种原因,他们有不同的路径

    所以,

    • 我正在登录账户 A.

    • 它正在为帐户 A 创建 cookie

    • 我在账户 B 上“自我投掷”/“登录”

    • 它正在为帐户 B 创建 cookie

    • 我正在进入[3]端点

    • 它首先读取?帐户 A 的 cookie

    • 然后我删除了帐户的 A cookie

    • 刷新页面

    • 现在我在账户 B.

    在此输入图像描述

    所以我必须尝试修复那些创建的 cookie 的路径。

    编辑

    固定:

    services.ConfigureApplicationCookie(options =>
    {
        (...)
        options.Cookie.Path = "/";
    });
    

相关问题