2

カスタム asp.net ID を実行しており、asp.net 組み込みテーブルを使用していません。カスタムを実装してユーザーを正常に作成しましたCreateAsync

今、新しい暗号化されたパスワードでユーザーを更新したいので、のカスタム実装を提供する方法がわかりませんUpdateAsync method

これは私のテーブルです:

ユーザー:Id,Name,EmailId,Password,Statistics,Salary

モデル:

public class UserModel : IUser 
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string EmailId { get; set; }  
    public string Password { get; set; }
    public int Salary { get; set; }
}

IUserstore を実装する私のカスタム クラス:

public class UserStore : IUserStore<UserModel>, IUserPasswordStore<UserModel>
{
    private readonly MyEntities _dbContext;
    private readonly HttpContext _httpContext;

    // How to implement this method for updating only user password
    public Task UpdateAsync(UserModel user)
    {
        throw new NotImplementedException();
    }

    public Task CreateAsync(UserModel user)
    {
        return Task.Factory.StartNew(() =>
            {
                HttpContext.Current = _httpContext ?? HttpContext.Current;
                var user = _dbContext.User.Create();
                user.Name = user.Name;
                user.EmailId = user.EmailId;
                user.EmailAddress = user.Email;
                user.Password = user.Password;
               _dbContext.Users.Add(dbUser);
               _dbContext.SaveChanges();
            });
    }

    public Task SetPasswordHashAsync(UserModel user, string passwordHash)
    {
        return Task.Factory.StartNew(() =>
            {
                HttpContext.Current = _httpContext ?? HttpContext.Current;
                var userObj = GetUserObj(user);
                if (userObj != null)
                {
                    userObj.Password = passwordHash;
                    _dbContext.SaveChanges();
                }
                else
                    user.Password = passwordHash;
            });
    }

    public Task<string> GetPasswordHashAsync(UserModel user)
    { 
        //other code
    }
}

コントローラ:

public class MyController : ParentController
{
    public MyController()
        : this(new UserManager<UserModel>(new UserStore(new MyEntities())))
    {
    }

    public UserManager<UserModel> UserManager { get; private set; }

    [HttpPost]
    public async Task<JsonResult> SaveUser(UserModel userModel)
    {
        IdentityResult result = null;
        if (userModel.Id > 0) //want to update user with new encrypted password
            result = await UserManager.UpdateAsync(user);
        else
            result = await UserManager.CreateAsync(userModel.EmailId, userModel.Password);
    }        
}
4

2 に答える 2

2

これがあなたの探しているものかどうかわからない...

public Task UpdateAsync(UserModel model)
{
    var user = _dbContext.User.Find(x => x.id == model.id);
    user.Password = model.Password;
    _dbContext.SaveChanges();
    return Task.CompletedTask;
}

特定のレコードを取得してパスワードを更新し、レコードを保存します。

編集

パスワードが暗号化されていないため、その文字列を取得してモデルをそのままにしておくコードを追加しました。この拡張メソッドはパスワードの値を暗号化します。これをテストしていませんが、機能すると確信しています。

 user.Password = model.Password.EncryptPassword(EncryptKey);

パスワードを暗号化する拡張メソッド

于 2016-09-01T17:09:52.430 に答える