【问题标题】:Changing ASP.NET Identity Password [duplicate]更改 ASP.NET 身份密码 [重复]
【发布时间】:2016-10-11 23:06:22
【问题描述】:

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

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");
        }
    }

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

【问题讨论】:

    标签: c# asp.net-core asp.net-identity


    【解决方案1】:

    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");
        }
    }
    

    【讨论】:

    • 在两次操作中这样做不好,如果第二次操作失败,用户实际上没有密码
    • 是的,使用ChangePasswordAsync 方法可能更好,但我认为这超出了原始问题的范围。
    【解决方案2】:

    this question 中查看我的答案。它允许仅使用 userId 和新密码更改密码,这对于允许管理员设置用户密码并在单个事务中执行此操作很有用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 2014-07-06
      • 2020-03-26
      • 2018-05-21
      相关资源
      最近更新 更多