Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改ASP.NET标识密码_C#_Asp.net Core_Asp.net Identity - Fatal编程技术网

C# 更改ASP.NET标识密码

C# 更改ASP.NET标识密码,c#,asp.net-core,asp.net-identity,C#,Asp.net Core,Asp.net Identity,我有一个类,通过搜索电子邮件并确保它不存在来创建用户,它创建了一个用户: public async Task EnsureSeedDataAsync() { if (await _userManager.FindByEmailAsync("test@theworld.com") == null) { // Add the user. var newUser = new CRAMSUser()

我有一个类,通过搜索电子邮件并确保它不存在来创建用户,它创建了一个用户:

public async Task EnsureSeedDataAsync()
    {
        if (await _userManager.FindByEmailAsync("test@theworld.com") == null)
        {
            // Add the user.
            var newUser = new CRAMSUser()
            {
                UserName = "test",
                Email = "test@crams.com"
            };

            await _userManager.CreateAsync(newUser, "P@ssw0rd!");
        }
    }
我正在尝试创建另一个类来更改密码,使用相同的方法,但对于如何创建要传递到RemovePassword和AddPassword调用中的currentUser对象,我感到困惑。这就是我到目前为止所做的:

    public async Task ChangePassword()
    {
        if (await _userManager.FindByEmailAsync("test@theworld.com") != null)
        {
            _userManager.RemovePasswordAsync(currentUser);

            _userManager.AddPasswordAsync(currentUser, "newPassword");
        }
    }

有人能告诉我正确的方向吗?因为我是新手,不知道如何传输当前用户对象,其中包含正在搜索的电子邮件。
FindByEmailAsyc
返回用户对象,您需要将其保存到一个变量,并将其传递给其他userManager调用。另外,
RemovePassword
AddPassword
方法将
User
对象的键值作为参数,而不是整个
User
对象

public async Task ChangePassword()
{

    var currentUser = await _userManager.FindByEmailAsync("test@theworld.com") 
    if (currentUser != null)
    {
        _userManager.RemovePasswordAsync(currentUser.Id);

        _userManager.AddPasswordAsync(currentUser.Id, "newPassword");
    }
}
请看我的答案。它允许仅使用userId和newpassword更改密码,这对于允许管理员设置用户密码并在一个事务中进行操作非常有用


它归结为创建一个直接调用底层用户存储的新方法

在两个操作中执行此操作并不好,如果第二个操作失败,用户实际上没有密码是的,使用
ChangePasswordAsync
方法可能更好,但我认为这超出了原始问题的范围。