添加登录功能
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
using Apimanager_backend.Dtos;
|
||||
using Apimanager_backend.Models;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace Apimanager_backend.Services
|
||||
{
|
||||
public interface IUserService
|
||||
{
|
||||
/// <summary>
|
||||
/// 登录用户,根据用户名和密码进行身份验证。
|
||||
/// </summary>
|
||||
/// <param name="username">用户名</param>
|
||||
/// <param name="password">密码</param>
|
||||
/// <returns>包含用户信息的 <see cref="UserInfoDto"/></returns>
|
||||
Task<UserInfoDto> LoginAsync(string username, string password);
|
||||
|
||||
/// <summary>
|
||||
/// 发送密码重置邮件到指定邮箱。
|
||||
/// </summary>
|
||||
/// <param name="email">用户注册的邮箱地址</param>
|
||||
/// <returns>异步操作</returns>
|
||||
Task SendResetPasswordEmailAsync(string email);
|
||||
|
||||
/// <summary>
|
||||
/// 重置用户密码,验证重置令牌的有效性并更新密码。
|
||||
/// </summary>
|
||||
/// <param name="email">用户邮箱地址</param>
|
||||
/// <param name="token">重置密码的令牌</param>
|
||||
/// <param name="newPassword">新的密码</param>
|
||||
/// <returns>异步操作</returns>
|
||||
Task ResetPasswordAsync(string email, string token, string newPassword);
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户信息。
|
||||
/// </summary>
|
||||
/// <param name="username">用户名</param>
|
||||
/// <returns>包含用户信息的 <see cref="UserInfoDto"/></returns>
|
||||
Task<UserInfoDto> GetUserAsync(string username);
|
||||
|
||||
/// <summary>
|
||||
/// 更新用户信息。
|
||||
/// </summary>
|
||||
/// <param name="user">包含更新信息的 <see cref="UpdateUserDto"/></param>
|
||||
/// <returns>更新后的 <see cref="UserInfoDto"/></returns>
|
||||
Task<UserInfoDto> UpdateUserAsync(UpdateUserDto user);
|
||||
|
||||
/// <summary>
|
||||
/// 删除指定的用户。
|
||||
/// </summary>
|
||||
/// <param name="username">要删除的用户名</param>
|
||||
/// <returns>异步操作</returns>
|
||||
Task DeleteUserAsync(string username);
|
||||
|
||||
/// <summary>
|
||||
/// 创建新用户。
|
||||
/// </summary>
|
||||
/// <param name="user">包含新用户信息的 <see cref="CreateUserDto"/></param>
|
||||
/// <returns>创建成功的用户信息 <see cref="UserInfoDto"/></returns>
|
||||
Task<UserInfoDto> CreateUserAsync(CreateUserDto user);
|
||||
|
||||
/// <summary>
|
||||
/// 禁用用户,使其无法登录。
|
||||
/// </summary>
|
||||
/// <param name="username">要禁用的用户名</param>
|
||||
/// <returns>异步操作</returns>
|
||||
Task BanUserAsync(string username);
|
||||
|
||||
/// <summary>
|
||||
/// 取消禁用用户,恢复登录权限。
|
||||
/// </summary>
|
||||
/// <param name="username">要取消禁用的用户名</param>
|
||||
/// <returns>异步操作</returns>
|
||||
Task UnbanUserAsync(string username);
|
||||
|
||||
/// <summary>
|
||||
/// 获取分页的用户列表。
|
||||
/// </summary>
|
||||
/// <param name="page">要获取的页码,从1开始</param>
|
||||
/// <param name="pageSize">每页的用户数量</param>
|
||||
/// <param name="desc">是否按降序排序</param>
|
||||
/// <returns>包含用户信息的 <see cref="List{UserInfoDto}"/></returns>
|
||||
Task<List<UserInfoDto>> GetUsersAsync(int page, int pageSize, bool desc);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
using Apimanager_backend.Config;
|
||||
using Apimanager_backend.Data;
|
||||
using Apimanager_backend.Dtos;
|
||||
using Apimanager_backend.Exceptions;
|
||||
using Apimanager_backend.Models;
|
||||
using AutoMapper;
|
||||
using Microsoft.AspNetCore.Connections.Features;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Apimanager_backend.Services
|
||||
{
|
||||
public class UserService : IUserService
|
||||
{
|
||||
private readonly ApiContext apiContext;
|
||||
private readonly IMapper mapper;
|
||||
public UserService(ApiContext apiContext,IMapper automapper)
|
||||
{
|
||||
this.apiContext = apiContext;
|
||||
this.mapper = automapper;
|
||||
}
|
||||
public Task BanUserAsync(string username)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<UserInfoDto> CreateUserAsync(CreateUserDto user)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task DeleteUserAsync(string username)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<UserInfoDto> GetUserAsync(string username)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<List<UserInfoDto>> GetUsersAsync(int page, int pageSize, bool desc)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public async Task<UserInfoDto> LoginAsync(string username, string password)
|
||||
{
|
||||
//查找用户
|
||||
User? user = await apiContext.Users.SingleOrDefaultAsync(x =>
|
||||
x.Username == username && x.PassHash == password
|
||||
);
|
||||
|
||||
//用户不存在或密码错误都为登录失败
|
||||
if(user == null)
|
||||
{
|
||||
throw new BaseException(2001, "Invalid username or password");
|
||||
}
|
||||
|
||||
//用户被禁用
|
||||
if (user.IsBan)
|
||||
{
|
||||
throw new BaseException(2002, "User account is disabled");
|
||||
}
|
||||
|
||||
return mapper.Map<UserInfoDto>(user);
|
||||
}
|
||||
|
||||
public Task ResetPasswordAsync(string email, string token, string newPassword)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task SendResetPasswordEmailAsync(string email)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task UnbanUserAsync(string username)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<UserInfoDto> UpdateUserAsync(UpdateUserDto user)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user