更改ASP.NET身份密码

时间:2016-10-11 23:06:23

标签: 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()
            {
                UserName = "test",
                Email = "test@crams.com"
            };

            await _userManager.CreateAsync(newUser, "P@ssw0rd!");
        }
    }

我正在尝试使用相同的方法创建另一个类来更改密码,但我很困惑如何创建一个currentUser对象以传递给RemovePassword和AddPassword调用。这就是我到目前为止所做的:

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

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

有人可以指导我正确的方向,因为我是新手,并且不知道如何传输包含正在搜索的电子邮件的currentUser对象。

2 个答案:

答案 0 :(得分:2)

FindByEmailAsyc返回用户对象,您需要将其保存到变量并将其传递给其他userManager调用。此外,RemovePasswordAddPassword方法将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");
    }
}

答案 1 :(得分:1)

请参阅this question中的答案。它允许仅使用userId&更改密码。新密码,可用于允许管理员设置用户密码并在单个事务中执行此操作。

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