完成验证码及登录功能

This commit is contained in:
橙子
2023-02-04 18:06:42 +08:00
parent cfd25b0a8d
commit b01d242cbc
276 changed files with 24201 additions and 22 deletions

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.RBAC.Application.Contracts.Identity.Dtos.Account
{
public class CaptchaImageDto
{
public string Uuid { get; set; }=string.Empty;
public byte[] Img { get; set; }
}
}

View File

@@ -11,6 +11,31 @@
<param name="input"></param>
<returns></returns>
</member>
<member name="M:Yi.RBAC.Application.Identity.AccountService.Get">
<summary>
查询已登录的账户信息
</summary>
<returns></returns>
<exception cref="T:Yi.Framework.Core.Exceptions.AuthException"></exception>
</member>
<member name="M:Yi.RBAC.Application.Identity.AccountService.GetVue3Router">
<summary>
获取当前登录用户的前端路由
</summary>
<returns></returns>
</member>
<member name="M:Yi.RBAC.Application.Identity.AccountService.PostLogout">
<summary>
退出登录
</summary>
<returns></returns>
</member>
<member name="M:Yi.RBAC.Application.Identity.AccountService.GetCaptchaImage">
<summary>
生成验证码
</summary>
<returns></returns>
</member>
<member name="T:Yi.RBAC.Application.Identity.DeptService">
<summary>
Dept服务实现

View File

@@ -1,5 +1,10 @@
using Microsoft.AspNetCore.Identity;
using Hei.Captcha;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using NET.AutoWebApi.Setting;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -7,13 +12,20 @@ using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Auth.JwtBearer.Authentication;
using Yi.Framework.Core.CurrentUsers;
using Yi.Framework.Core.Enums;
using Yi.Framework.Core.Exceptions;
using Yi.Framework.Ddd.Repositories;
using Yi.Framework.Ddd.Services;
using Yi.Framework.ThumbnailSharp;
using Yi.RBAC.Application.Contracts.Account.Dtos;
using Yi.RBAC.Application.Contracts.Identity;
using Yi.RBAC.Application.Contracts.Identity.Dtos.Account;
using Yi.RBAC.Domain.Identity;
using Yi.RBAC.Domain.Identity.Dtos;
using Yi.RBAC.Domain.Identity.Entities;
using Yi.RBAC.Domain.Identity.Repositories;
using Yi.RBAC.Domain.Shared.Identity.ConstClasses;
using Yi.RBAC.Domain.Shared.Identity.Dtos;
namespace Yi.RBAC.Application.Identity
{
@@ -29,12 +41,17 @@ namespace Yi.RBAC.Application.Identity
[Autowired]
private AccountManager _accountManager { get; set; }
[Autowired]
private IRepository<MenuEntity> _menuRepository { get; set; }
[Autowired]
private SecurityCodeHelper _securityCode { get; set; }
/// <summary>
/// 登录
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<string> PostLoginAsync(LoginInputVo input)
public async Task<object> PostLoginAsync(LoginInputVo input)
{
UserEntity user = new();
//登录成功
@@ -50,7 +67,79 @@ namespace Yi.RBAC.Application.Identity
//创建token
var token = _jwtTokenManager.CreateToken(_accountManager.UserInfoToClaim(userInfo));
return token;
return new { Token = token };
}
/// <summary>
/// 查询已登录的账户信息
/// </summary>
/// <returns></returns>
/// <exception cref="AuthException"></exception>
[Route("/api/account")]
[Authorize]
public async Task<UserRoleMenuDto> Get()
{
//通过鉴权jwt获取到用户的id
var userId = _currentUser.Id;
//此处从缓存中获取即可
//var data = _cacheDb.Get<UserRoleMenuDto>($"Yi:UserInfo:{userId}");
var data = await _userRepository.GetUserAllInfoAsync(userId);
//系统用户数据被重置,老前端访问重新授权
if (data is null)
{
throw new AuthException();
}
data.Menus.Clear();
return data;
}
/// <summary>
/// 获取当前登录用户的前端路由
/// </summary>
/// <returns></returns>
[Authorize]
public async Task<List<Vue3RouterDto>> GetVue3Router()
{
var userId = _currentUser.Id;
var data = await _userRepository.GetUserAllInfoAsync(userId);
var menus = data.Menus.ToList();
//为超级管理员直接给全部路由
if (UserConst.Admin.Equals(data.User.UserName))
{
menus = await _menuRepository.GetListAsync();
}
//将后端菜单转换成前端路由,组件级别需要过滤
List<Vue3RouterDto> routers = menus.Vue3RouterBuild();
return routers;
}
/// <summary>
/// 退出登录
/// </summary>
/// <returns></returns>
public Task<bool> PostLogout()
{
return Task.FromResult(true);
}
/// <summary>
/// 生成验证码
/// </summary>
/// <returns></returns>
[AllowAnonymous]
public CaptchaImageDto GetCaptchaImage()
{
var uuid = Guid.NewGuid();
var code = _securityCode.GetRandomEnDigitalText(4);
//将uuid与codeRedis缓存中心化保存起来登录根据uuid比对即可
//10分钟过期
//_cacheDb.Set($"Yi:Captcha:{uuid}", code, new TimeSpan(0, 10, 0));
var imgbyte = _securityCode.GetEnDigitalCodeByte(code);
return new CaptchaImageDto { Img = imgbyte, Uuid = code };
}
}
}

View File

@@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.RBAC.Domain.Shared.School.ConstClasses
{
/// <summary>
/// 常量定义
/// </summary>
public class StudentConst
{
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -10,8 +10,12 @@
<ItemGroup>
<Compile Include="..\GlobalUsings.cs" Link="Properties\GlobalUsings.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Hei.Captcha" Version="0.3.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\framework\Yi.Framework.Data\Yi.Framework.Data.csproj" />
<ProjectReference Include="..\..\..\module\Yi.Framework.ThumbnailSharp\Yi.Framework.ThumbnailSharp.csproj" />
<ProjectReference Include="..\Yi.RBAC.Domain.Shared\Yi.RBAC.Domain.Shared.csproj" />
</ItemGroup>

View File

@@ -1,3 +1,4 @@
using Hei.Captcha;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using StartupModules;
@@ -8,13 +9,15 @@ using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Core.Attributes;
using Yi.Framework.Data;
using Yi.Framework.ThumbnailSharp;
using Yi.RBAC.Domain.Shared;
namespace Yi.RBAC.Domain
{
[DependsOn(
typeof(YiRBACDomainSharedModule),
typeof(YiFrameworkDataModule)
typeof(YiFrameworkDataModule),
typeof(YiFrameworkThumbnailSharpModule)
)]
public class YiRBACDomainModule : IStartupModule
{
@@ -24,7 +27,7 @@ namespace Yi.RBAC.Domain
public void ConfigureServices(IServiceCollection services, ConfigureServicesContext context)
{
//services.AddTransient<StudentManager>();
services.AddHeiCaptcha();
}
}
}

View File

@@ -22,6 +22,9 @@
<None Update="public.pem">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="yi-sqlsugar-dev.db">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>