ASP.net Core Identity 从 Administrator 以另一个用户身份登录

ASP.net Core Identity Sign in as another user from Administrator

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

与其创建一个管理员可以 update/delete 用户的整个单独的用户管理屏幕,我正在考虑让管理员登录任何现有用户的帐户并更改其信息。

我正在寻找一种方法,让我的具有管理员角色的用户可以登录 ASP.net Core Identity

中的任何其他用户帐户

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

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(...)
        {
            ...
        }

        ...
    }
}