From fd5a6c75870cfa24acfbccad8faa3179b702ec90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=86=9B?= <510423039@qq.com> Date: Sat, 15 May 2021 14:05:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=201.=E6=B7=BB=E5=8A=A0=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=AF=86=E7=A0=81=202.=E4=BC=98=E5=8C=96=E5=89=8D=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CompanyNameProjectName.HttpApi.Host.xml | 84 + .../appsettings.json | 4 +- ...yNameProjectName.Application.Contracts.xml | 44 + .../CompanyNameProjectName.Application.xml | 73 + .../Users/LoginAppService.cs | 19 +- .../Users/UserAppService.cs | 30 +- .../CompanyNameProjectName.HttpApi.xml | 8 + .../user-dropdown/ChangePassword.vue | 83 + .../header/components/user-dropdown/index.vue | 19 +- .../vue/src/locales/lang/en/layout/header.ts | 5 +- .../src/locales/lang/zh_CN/layout/header.ts | 6 +- content/vue/src/router/index.ts | 4 +- content/vue/src/services/ServiceProxies.ts | 5213 +++++++++-------- content/vue/src/services/ServiceProxyBase.ts | 11 +- content/vue/src/store/modules/user.ts | 1 - content/vue/src/views/admin/roles/AbpRole.ts | 45 +- .../src/views/admin/roles/CreateAbpRole.vue | 16 +- .../vue/src/views/admin/roles/EditAbpRole.vue | 24 +- .../views/admin/roles/PermissionAbpRole.vue | 12 +- content/vue/src/views/admin/users/AbpUser.ts | 43 +- .../src/views/admin/users/CreateAbpUser.vue | 48 +- .../vue/src/views/admin/users/EditAbpUser.vue | 57 +- content/vue/src/views/sys/login/LoginForm.vue | 235 +- 23 files changed, 3514 insertions(+), 2570 deletions(-) create mode 100644 content/aspnetcore/host/CompanyName.ProjectName.HttpApi.Host/CompanyNameProjectName.HttpApi.Host.xml create mode 100644 content/aspnetcore/src/CompanyName.ProjectName.Application.Contracts/CompanyNameProjectName.Application.Contracts.xml create mode 100644 content/aspnetcore/src/CompanyName.ProjectName.Application/CompanyNameProjectName.Application.xml create mode 100644 content/aspnetcore/src/CompanyName.ProjectName.HttpApi/CompanyNameProjectName.HttpApi.xml create mode 100644 content/vue/src/layouts/default/header/components/user-dropdown/ChangePassword.vue diff --git a/content/aspnetcore/host/CompanyName.ProjectName.HttpApi.Host/CompanyNameProjectName.HttpApi.Host.xml b/content/aspnetcore/host/CompanyName.ProjectName.HttpApi.Host/CompanyNameProjectName.HttpApi.Host.xml new file mode 100644 index 00000000..11085c4f --- /dev/null +++ b/content/aspnetcore/host/CompanyName.ProjectName.HttpApi.Host/CompanyNameProjectName.HttpApi.Host.xml @@ -0,0 +1,84 @@ + + + + CompanyName.ProjectName.HttpApi.Host + + + + + 配置options + + + + + + 审计日志 + + + + + Redis缓存 + + + + + + 异常处理 + + + + + + 配置虚拟文件系统 + + + + + + 映射Controller + + + + + 配置JWT + + + + + + + 配置SwaggerUI + + + + + + 配置本地化 + + + + + 配置跨域 + + + + + + + 配置Hangfire服务 + + + + + + 在使用nswag的时候,原生默认的api导致生产的代理类存在问题 + 所有隐藏原生的api,重写路由 + + + + + 把abp vnext 提供的api 归档 + + + + diff --git a/content/aspnetcore/host/CompanyName.ProjectName.HttpApi.Host/appsettings.json b/content/aspnetcore/host/CompanyName.ProjectName.HttpApi.Host/appsettings.json index 2350b5cf..941171a1 100644 --- a/content/aspnetcore/host/CompanyName.ProjectName.HttpApi.Host/appsettings.json +++ b/content/aspnetcore/host/CompanyName.ProjectName.HttpApi.Host/appsettings.json @@ -31,11 +31,11 @@ } }, "ConnectionStrings": { - "Default": "Data Source=mysql.platform.development.cn;Database=CompanyNameProjectName;uid=root;pwd=mysql@dmin;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" + "Default": "Data Source=mysql.platform.development.yhglobal.cn;Database=CompanyNameProjectName;uid=root;pwd=mysql@dmin;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" }, "Cache": { "Redis": { - "ConnectionString": "redis.platform.development.cn,password=OD5VbzIuAWsHOZV5ncYx9xaDsAMsKXn7", + "ConnectionString": "redis.platform.development.yhglobal.cn,password=OD5VbzIuAWsHOZV5ncYx9xaDsAMsKXn7", "DatabaseId": 234 } }, diff --git a/content/aspnetcore/src/CompanyName.ProjectName.Application.Contracts/CompanyNameProjectName.Application.Contracts.xml b/content/aspnetcore/src/CompanyName.ProjectName.Application.Contracts/CompanyNameProjectName.Application.Contracts.xml new file mode 100644 index 00000000..123c6ec3 --- /dev/null +++ b/content/aspnetcore/src/CompanyName.ProjectName.Application.Contracts/CompanyNameProjectName.Application.Contracts.xml @@ -0,0 +1,44 @@ + + + + CompanyName.ProjectName.Application.Contracts + + + + + 执行任务 + + + + + + 当前页面 + + + + + 每页多少条 + + + + + 登录 + + + + + 用户名或者邮箱 + + + + + 密码 + + + + + 过期时间 + + + + diff --git a/content/aspnetcore/src/CompanyName.ProjectName.Application/CompanyNameProjectName.Application.xml b/content/aspnetcore/src/CompanyName.ProjectName.Application/CompanyNameProjectName.Application.xml new file mode 100644 index 00000000..23b1e13e --- /dev/null +++ b/content/aspnetcore/src/CompanyName.ProjectName.Application/CompanyNameProjectName.Application.xml @@ -0,0 +1,73 @@ + + + + CompanyName.ProjectName.Application + + + + + Cron类型 + + + + + 周期性为分钟的任务 + + 执行周期的间隔,默认为每分钟一次 + + + + + 周期性为小时的任务 + + 第几分钟开始,默认为第一分钟 + 执行周期的间隔,默认为每小时一次 + + + + + 周期性为天的任务 + + 第几小时开始,默认从1点开始 + 第几分钟开始,默认从第1分钟开始 + 执行周期的间隔,默认为每天一次 + + + + + 周期性为周的任务 + + 星期几开始,默认从星期一点开始 + 第几小时开始,默认从1点开始 + 第几分钟开始,默认从第1分钟开始 + + + + + 周期性为月的任务 + + 几号开始,默认从一号开始 + 第几小时开始,默认从1点开始 + 第几分钟开始,默认从第1分钟开始 + + + + + 周期性为年的任务 + + 几月开始,默认从一月开始 + 几号开始,默认从一号开始 + 第几小时开始,默认从1点开始 + 第几分钟开始,默认从第1分钟开始 + + + + + 生成jwt token + + + + + + + diff --git a/content/aspnetcore/src/CompanyName.ProjectName.Application/Users/LoginAppService.cs b/content/aspnetcore/src/CompanyName.ProjectName.Application/Users/LoginAppService.cs index a5fc3689..df44c7a2 100644 --- a/content/aspnetcore/src/CompanyName.ProjectName.Application/Users/LoginAppService.cs +++ b/content/aspnetcore/src/CompanyName.ProjectName.Application/Users/LoginAppService.cs @@ -38,23 +38,24 @@ namespace CompanyNameProjectName.Users [SwaggerOperation(summary: "登录", Tags = new[] { "Login" })] public async Task PostAsync(LoginInputDto input) { - var result = await _signInManager.PasswordSignInAsync(input.Name, input.Password, false, true); - if (!result.Succeeded) throw new BusinessException("Login Faild"); - - var user = await _userManager.FindByNameAsync(input.Name); - if (user != null) + try { - - if (user == null) throw new BusinessException("Login Faild"); + var result = await _signInManager.PasswordSignInAsync(input.Name, input.Password, false, true); + if (!result.Succeeded) throw new Exception("用户名或者密码错误"); + var user = await _userManager.FindByNameAsync(input.Name); var roles = await _userManager.GetRolesAsync(user); - if (roles == null || roles.Count == 0) throw new BusinessException("Login Faild"); + if (roles == null || roles.Count == 0) throw new Exception("当前用户未分配角色"); var token = GenerateJwt(user, roles.ToList()); var loginOutputDto = ObjectMapper.Map(user); loginOutputDto.Token = token; loginOutputDto.Expiration = DateTime.Now.AddHours(_jwtOptions.ExpirationTime); return loginOutputDto; } - throw new BusinessException("Login Faild"); + catch(Exception ex) + { + throw new Exception(ex.Message); + } + } /// diff --git a/content/aspnetcore/src/CompanyName.ProjectName.Application/Users/UserAppService.cs b/content/aspnetcore/src/CompanyName.ProjectName.Application/Users/UserAppService.cs index 2ec2c220..caeb1e1a 100644 --- a/content/aspnetcore/src/CompanyName.ProjectName.Application/Users/UserAppService.cs +++ b/content/aspnetcore/src/CompanyName.ProjectName.Application/Users/UserAppService.cs @@ -1,5 +1,6 @@ using CompanyNameProjectName.Users.Dtos; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Swashbuckle.AspNetCore.Annotations; using System; @@ -10,16 +11,19 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Identity; +using Volo.Abp.Users; namespace CompanyNameProjectName.Users { + [Authorize] public class UserAppService : ApplicationService { private readonly IIdentityUserAppService _identityUserAppService; - - public UserAppService(IIdentityUserAppService identityUserAppService) + private readonly IdentityUserManager _userManager; + public UserAppService(IIdentityUserAppService identityUserAppService, IdentityUserManager userManager) { _identityUserAppService = identityUserAppService; + _userManager = userManager; } [SwaggerOperation(summary: "分页获取用户信息", Tags = new[] { "User" })] @@ -65,5 +69,27 @@ namespace CompanyNameProjectName.Users { return await _identityUserAppService.GetRolesAsync(userId); } + + /// + /// 修改密码 + /// + /// + /// + public async Task ChangePasswordAsync(ChangePasswordInput input) + { + var identityUser = await _userManager.GetByIdAsync(base.CurrentUser.GetId()); + IdentityResult result; + if (identityUser.PasswordHash == null) + { + result = await _userManager.AddPasswordAsync(identityUser, input.NewPassword); + } + else + { + result = await _userManager.ChangePasswordAsync(identityUser, input.CurrentPassword, input.NewPassword); + } + + if (!result.Succeeded) throw new Exception(result.Errors.FirstOrDefault().Description); + return result.Succeeded; + } } } diff --git a/content/aspnetcore/src/CompanyName.ProjectName.HttpApi/CompanyNameProjectName.HttpApi.xml b/content/aspnetcore/src/CompanyName.ProjectName.HttpApi/CompanyNameProjectName.HttpApi.xml new file mode 100644 index 00000000..27b12d23 --- /dev/null +++ b/content/aspnetcore/src/CompanyName.ProjectName.HttpApi/CompanyNameProjectName.HttpApi.xml @@ -0,0 +1,8 @@ + + + + CompanyName.ProjectName.HttpApi + + + + diff --git a/content/vue/src/layouts/default/header/components/user-dropdown/ChangePassword.vue b/content/vue/src/layouts/default/header/components/user-dropdown/ChangePassword.vue new file mode 100644 index 00000000..8460b7d2 --- /dev/null +++ b/content/vue/src/layouts/default/header/components/user-dropdown/ChangePassword.vue @@ -0,0 +1,83 @@ + + + diff --git a/content/vue/src/layouts/default/header/components/user-dropdown/index.vue b/content/vue/src/layouts/default/header/components/user-dropdown/index.vue index 9c6779ac..5913631d 100644 --- a/content/vue/src/layouts/default/header/components/user-dropdown/index.vue +++ b/content/vue/src/layouts/default/header/components/user-dropdown/index.vue @@ -17,6 +17,11 @@ icon="ion:document-text-outline" v-if="getShowDoc" /> + + - - + diff --git a/content/vue/src/views/admin/users/EditAbpUser.vue b/content/vue/src/views/admin/users/EditAbpUser.vue index 0126b5eb..23b04d84 100644 --- a/content/vue/src/views/admin/users/EditAbpUser.vue +++ b/content/vue/src/views/admin/users/EditAbpUser.vue @@ -13,10 +13,24 @@ - + + + + + + {{ item.name }} + + @@ -75,7 +89,6 @@ let defaultRolesRef = reactive(defaultRoles); const visibleChange = async (visible: boolean) => { - debugger; if (visible) { const roles = await getAllRoleAsync(); const userRoles = await getRolesByUserIdAsync(currentUserInfo.id as string); @@ -99,22 +112,25 @@ }); }; - // 保存用户 const submit = async () => { - let request = getFieldsValue(); - let userInfo = new IdentityUserUpdateDto(); - request.userId = currentUserInfo.id; - userInfo.userName = request.userName; - userInfo.name = request.name; - userInfo.surname = currentUserInfo.surname; - userInfo.email = request.email; - userInfo.phoneNumber = currentUserInfo.phoneNumber; - userInfo.lockoutEnabled = currentUserInfo.lockoutEnabled; - userInfo.concurrencyStamp = currentUserInfo.concurrencyStamp; - userInfo.roleNames = defaultRolesRef; - request.userInfo = userInfo; - await updateUserAsync({ request, changeOkLoading, validate, closeModal }); - ctx.emit('reload'); + try { + let request = getFieldsValue(); + let userInfo = new IdentityUserUpdateDto(); + request.userId = currentUserInfo.id; + userInfo.userName = request.userName; + userInfo.name = request.name; + userInfo.surname = currentUserInfo.surname; + userInfo.email = request.email; + userInfo.phoneNumber = currentUserInfo.phoneNumber; + userInfo.lockoutEnabled = currentUserInfo.lockoutEnabled; + userInfo.concurrencyStamp = currentUserInfo.concurrencyStamp; + userInfo.roleNames = defaultRolesRef; + request.userInfo = userInfo; + await updateUserAsync({ request, changeOkLoading, validate, closeModal }); + ctx.emit('reload'); + } catch (error) { + changeOkLoading(false); + } }; return { @@ -129,5 +145,8 @@ }, }); - - + diff --git a/content/vue/src/views/sys/login/LoginForm.vue b/content/vue/src/views/sys/login/LoginForm.vue index 3921682c..d4a8973d 100644 --- a/content/vue/src/views/sys/login/LoginForm.vue +++ b/content/vue/src/views/sys/login/LoginForm.vue @@ -1,29 +1,10 @@