- 创建一个包含用户相关信息的ASP.NET Core Web API。在用户类中,添加一个新的属性来存储密码的哈希值。
public class User {
public int Id { get; set; }
public string Username { get; set; }
public string PasswordHash { get; set; }
}
- 创建一个服务来处理用户的密码更新。这个服务应该使用bcrypt等哈希算法来计算输入密码的哈希值。
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class UserService {
constructor(private http: HttpClient) { }
updatePassword(id: number, currentPassword: string, newPassword: string) {
const update = { id, currentPassword, newPassword };
return this.http.put('/api/users/updatepassword', update);
}
}
- 创建一个控制器来处理密码更新的HTTP PUT请求。该控制器应该使用ASP.NET Core Identity库来验证用户当前密码是否正确,然后更新密码哈希值并保存到数据库中。
[HttpPut("updatepassword")]
public async Task UpdatePassword([FromBody] UserPasswordUpdate update)
{
var user = await _userManager.GetUserAsync(User);
if (user == null) {
return Unauthorized();
}
var result = await _userManager.ChangePasswordAsync(user, update.CurrentPassword, update.NewPassword);
if (!result.Succeeded) {
return BadRequest(result.Errors);
}
user.PasswordHash = _userManager.PasswordHasher.HashPassword(user, update.NewPassword);
await _userManager.UpdateAsync(user);
return Ok();
}
public class UserPasswordUpdate {
public int Id { get; set; }
public string CurrentPassword { get; set; }
public string NewPassword { get; set; }
}
- 在Angular应用中,创建一个表单来允许用户输入当前密码和新密码。当用户提交表单时,使用UserService来从Web API更新密码。
import { Component } from '@angular/core';
import { UserService } from './user.service';
@Component({