首页 > 解决方案 > ASP.net Core Identity 从管理员以另一个用户身份登录

问题描述

我正在使用 ASP.net Core Identity,我已经在我的应用程序中注册了用户,并且我已经为其中一个用户分配了管理员角色。现在我希望该用户登录到其他任何人的帐户。作为站点的管理员,该用户应该能够登录到任何其他用户的帐户,并且可以进行任何他想要的更改。

我没有创建一个完整的单独的用户管理屏幕,管理员可以在其中更新/删除用户,而是让管理员登录到任何现有用户的帐户并更改其信息。

我正在寻找一种方式,让我的具有管理员角色的用户可以登录到 ASP.net Core Identity 中的任何其他用户帐户

标签: asp.net-coreauthorizationasp.net-core-identity

解决方案


您可以使用.SignInAsync()from 方法SignInManager以特定用户身份登录,而无需知道他们的密码:

public class ImpersonateUserHandler : IRequestHandler<ImpersonateUser, CommandResult>
{
    private readonly SignInManager<AppUser> _signInManager;

    public ImpersonateUserHandler(SignInManager<AppUser> signInManager)
    {
        _signInManager = signInManager;
    }

    public async Task<CommandResult> Handle(ImpersonateUser command, 
        CancellationToken cancellationToken)
    {
        try
        {
            cancellationToken.ThrowIfCancellationRequested();

            // Look up the user you're going to impersonate
            var user = await _signInManager.UserManager.FindByIdAsync(command.UserId);

            ...

            // Login
            var signInResult = await _signInManager.SignInAsync(user, false);

            ...
        }
        catch(...)
        {
            ...
        }

        ...
    }
}

推荐阅读