😎1、调整短线验证码 2、代码优化
This commit is contained in:
parent
949b23fb50
commit
78caebebb8
@ -191,11 +191,8 @@ public class SysAuthService : IDynamicApiController, ITransient
|
|||||||
[DisplayName("手机号登录")]
|
[DisplayName("手机号登录")]
|
||||||
public virtual async Task<LoginOutput> LoginPhone([Required] LoginPhoneInput input)
|
public virtual async Task<LoginOutput> LoginPhone([Required] LoginPhoneInput input)
|
||||||
{
|
{
|
||||||
var verifyCode = _sysCacheService.Get<string>($"{CacheConst.KeyPhoneVerCode}{input.Phone}");
|
// 校验短信验证码
|
||||||
if (string.IsNullOrWhiteSpace(verifyCode))
|
App.GetRequiredService<SysSmsService>().VerifyCode(new SmsVerifyCodeInput { Phone = input.Phone, Code = input.Code });
|
||||||
throw Oops.Oh("验证码不存在或已失效,请重新获取!");
|
|
||||||
if (verifyCode != input.Code)
|
|
||||||
throw Oops.Oh("验证码错误!");
|
|
||||||
|
|
||||||
// 账号是否存在
|
// 账号是否存在
|
||||||
var user = await _sysUserRep.AsQueryable().Includes(u => u.SysOrg).ClearFilter().FirstAsync(u => u.Phone.Equals(input.Phone));
|
var user = await _sysUserRep.AsQueryable().Includes(u => u.SysOrg).ClearFilter().FirstAsync(u => u.Phone.Equals(input.Phone));
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
using Aliyun.OSS.Util;
|
using Aliyun.OSS.Util;
|
||||||
using OnceMi.AspNetCore.OSS;
|
using OnceMi.AspNetCore.OSS;
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace Admin.NET.Core.Service;
|
namespace Admin.NET.Core.Service;
|
||||||
|
|
||||||
@ -538,13 +537,13 @@ public class SysFileService : IDynamicApiController, ITransient
|
|||||||
".swf" => "application/x-shockwave-flash",
|
".swf" => "application/x-shockwave-flash",
|
||||||
".rss" => "application/rss+xml; charset=ISO-8859-1",
|
".rss" => "application/rss+xml; charset=ISO-8859-1",
|
||||||
".xml" => "text/xml",
|
".xml" => "text/xml",
|
||||||
//除了以上类型,都允许下载
|
// 除了以上类型都允许下载
|
||||||
_ => "application/octet-stream",
|
_ => "application/octet-stream",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//为了使用 ControllBase 中的方法,需要继承自 ControllBase 的对象
|
// 为了使用 ControllBase 中的方法,需要继承自 ControllBase 的对象
|
||||||
internal class FileDownHelper : ControllerBase
|
internal class FileDownHelper : ControllerBase
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
25
Admin.NET/Admin.NET.Core/Service/Message/Dto/SmsInput.cs
Normal file
25
Admin.NET/Admin.NET.Core/Service/Message/Dto/SmsInput.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||||
|
//
|
||||||
|
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||||
|
//
|
||||||
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
|
public class SmsVerifyCodeInput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 手机号码
|
||||||
|
/// </summary>
|
||||||
|
/// <example>admin</example>
|
||||||
|
[Required(ErrorMessage = "手机号码不能为空")]
|
||||||
|
[DataValidation(ValidationTypes.PhoneNumber, ErrorMessage = "手机号码不正确")]
|
||||||
|
public string Phone { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 验证码
|
||||||
|
/// </summary>
|
||||||
|
/// <example>123456</example>
|
||||||
|
[Required(ErrorMessage = "验证码不能为空"), MinLength(4, ErrorMessage = "验证码不能少于4个字符")]
|
||||||
|
public string Code { get; set; }
|
||||||
|
}
|
||||||
@ -43,6 +43,22 @@ public class SysSmsService : IDynamicApiController, ITransient
|
|||||||
await TencentSendSms(phoneNumber);
|
await TencentSendSms(phoneNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 校验短信验证码
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool VerifyCode(SmsVerifyCodeInput input)
|
||||||
|
{
|
||||||
|
var verifyCode = _sysCacheService.Get<string>($"{CacheConst.KeyPhoneVerCode}{input.Phone}");
|
||||||
|
if (string.IsNullOrWhiteSpace(verifyCode))
|
||||||
|
throw Oops.Oh("验证码不存在或已失效,请重新获取!");
|
||||||
|
if (verifyCode != input.Code)
|
||||||
|
throw Oops.Oh("验证码错误!");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 阿里云发送短信 📨
|
/// 阿里云发送短信 📨
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -20,6 +20,7 @@ import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } fr
|
|||||||
import { AddRoleInput } from '../models';
|
import { AddRoleInput } from '../models';
|
||||||
import { AdminResultInt32 } from '../models';
|
import { AdminResultInt32 } from '../models';
|
||||||
import { AdminResultListInt64 } from '../models';
|
import { AdminResultListInt64 } from '../models';
|
||||||
|
import { AdminResultListListString } from '../models';
|
||||||
import { AdminResultListRoleOutput } from '../models';
|
import { AdminResultListRoleOutput } from '../models';
|
||||||
import { AdminResultListString } from '../models';
|
import { AdminResultListString } from '../models';
|
||||||
import { AdminResultSqlSugarPagedListPageRoleOutput } from '../models';
|
import { AdminResultSqlSugarPagedListPageRoleOutput } from '../models';
|
||||||
@ -135,7 +136,7 @@ export const SysRoleApiAxiosParamCreator = function (configuration?: Configurati
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 授权角色接口资源 🔖
|
* @summary 授权角色接口 🔖
|
||||||
* @param {RoleApiInput} [body]
|
* @param {RoleApiInput} [body]
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
@ -484,7 +485,7 @@ export const SysRoleApiAxiosParamCreator = function (configuration?: Configurati
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 获取角色接口资源集合 🔖
|
* @summary 获取角色接口黑名单集合 🔖
|
||||||
* @param {number} id 主键Id
|
* @param {number} id 主键Id
|
||||||
* @param {StatusEnum} [status] 状态
|
* @param {StatusEnum} [status] 状态
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
@ -637,7 +638,7 @@ export const SysRoleApiAxiosParamCreator = function (configuration?: Configurati
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 获取用户接口资源集合 🔖
|
* @summary 获取用户接口集合 🔖
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
*/
|
*/
|
||||||
@ -717,7 +718,7 @@ export const SysRoleApiFp = function(configuration?: Configuration) {
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 授权角色接口资源 🔖
|
* @summary 授权角色接口 🔖
|
||||||
* @param {RoleApiInput} [body]
|
* @param {RoleApiInput} [body]
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
@ -816,7 +817,7 @@ export const SysRoleApiFp = function(configuration?: Configuration) {
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 获取角色接口资源集合 🔖
|
* @summary 获取角色接口黑名单集合 🔖
|
||||||
* @param {number} id 主键Id
|
* @param {number} id 主键Id
|
||||||
* @param {StatusEnum} [status] 状态
|
* @param {StatusEnum} [status] 状态
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
@ -859,11 +860,11 @@ export const SysRoleApiFp = function(configuration?: Configuration) {
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 获取用户接口资源集合 🔖
|
* @summary 获取用户接口集合 🔖
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
*/
|
*/
|
||||||
async apiSysRoleUserApiListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListString>>> {
|
async apiSysRoleUserApiListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListListString>>> {
|
||||||
const localVarAxiosArgs = await SysRoleApiAxiosParamCreator(configuration).apiSysRoleUserApiListGet(options);
|
const localVarAxiosArgs = await SysRoleApiAxiosParamCreator(configuration).apiSysRoleUserApiListGet(options);
|
||||||
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
|
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
|
||||||
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
|
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
|
||||||
@ -901,7 +902,7 @@ export const SysRoleApiFactory = function (configuration?: Configuration, basePa
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 授权角色接口资源 🔖
|
* @summary 授权角色接口 🔖
|
||||||
* @param {RoleApiInput} [body]
|
* @param {RoleApiInput} [body]
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
@ -972,7 +973,7 @@ export const SysRoleApiFactory = function (configuration?: Configuration, basePa
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 获取角色接口资源集合 🔖
|
* @summary 获取角色接口黑名单集合 🔖
|
||||||
* @param {number} id 主键Id
|
* @param {number} id 主键Id
|
||||||
* @param {StatusEnum} [status] 状态
|
* @param {StatusEnum} [status] 状态
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
@ -1003,11 +1004,11 @@ export const SysRoleApiFactory = function (configuration?: Configuration, basePa
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 获取用户接口资源集合 🔖
|
* @summary 获取用户接口集合 🔖
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
*/
|
*/
|
||||||
async apiSysRoleUserApiListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListString>> {
|
async apiSysRoleUserApiListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListListString>> {
|
||||||
return SysRoleApiFp(configuration).apiSysRoleUserApiListGet(options).then((request) => request(axios, basePath));
|
return SysRoleApiFp(configuration).apiSysRoleUserApiListGet(options).then((request) => request(axios, basePath));
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -1044,7 +1045,7 @@ export class SysRoleApi extends BaseAPI {
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 授权角色接口资源 🔖
|
* @summary 授权角色接口 🔖
|
||||||
* @param {RoleApiInput} [body]
|
* @param {RoleApiInput} [body]
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
@ -1122,7 +1123,7 @@ export class SysRoleApi extends BaseAPI {
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 获取角色接口资源集合 🔖
|
* @summary 获取角色接口黑名单集合 🔖
|
||||||
* @param {number} id 主键Id
|
* @param {number} id 主键Id
|
||||||
* @param {StatusEnum} [status] 状态
|
* @param {StatusEnum} [status] 状态
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
@ -1156,12 +1157,12 @@ export class SysRoleApi extends BaseAPI {
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @summary 获取用户接口资源集合 🔖
|
* @summary 获取用户接口集合 🔖
|
||||||
* @param {*} [options] Override http request option.
|
* @param {*} [options] Override http request option.
|
||||||
* @throws {RequiredError}
|
* @throws {RequiredError}
|
||||||
* @memberof SysRoleApi
|
* @memberof SysRoleApi
|
||||||
*/
|
*/
|
||||||
public async apiSysRoleUserApiListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListString>> {
|
public async apiSysRoleUserApiListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListListString>> {
|
||||||
return SysRoleApiFp(this.configuration).apiSysRoleUserApiListGet(options).then((request) => request(this.axios, this.basePath));
|
return SysRoleApiFp(this.configuration).apiSysRoleUserApiListGet(options).then((request) => request(this.axios, this.basePath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,8 @@ import { Configuration } from '../configuration';
|
|||||||
// Some imports not used depending on template conditions
|
// Some imports not used depending on template conditions
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
|
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
|
||||||
|
import { AdminResultBoolean } from '../models';
|
||||||
|
import { SmsVerifyCodeInput } from '../models';
|
||||||
/**
|
/**
|
||||||
* SysSmsApi - axios parameter creator
|
* SysSmsApi - axios parameter creator
|
||||||
* @export
|
* @export
|
||||||
@ -223,6 +225,54 @@ export const SysSmsApiAxiosParamCreator = function (configuration?: Configuratio
|
|||||||
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||||
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
||||||
|
|
||||||
|
return {
|
||||||
|
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
|
||||||
|
options: localVarRequestOptions,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @summary 校验短信验证码
|
||||||
|
* @param {SmsVerifyCodeInput} [body]
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
apiSysSmsVerifyCodePost: async (body?: SmsVerifyCodeInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
|
||||||
|
const localVarPath = `/api/sysSms/verifyCode`;
|
||||||
|
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
||||||
|
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
|
||||||
|
let baseOptions;
|
||||||
|
if (configuration) {
|
||||||
|
baseOptions = configuration.baseOptions;
|
||||||
|
}
|
||||||
|
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
|
||||||
|
const localVarHeaderParameter = {} as any;
|
||||||
|
const localVarQueryParameter = {} as any;
|
||||||
|
|
||||||
|
// authentication Bearer required
|
||||||
|
// http bearer authentication required
|
||||||
|
if (configuration && configuration.accessToken) {
|
||||||
|
const accessToken = typeof configuration.accessToken === 'function'
|
||||||
|
? await configuration.accessToken()
|
||||||
|
: await configuration.accessToken;
|
||||||
|
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
|
||||||
|
|
||||||
|
const query = new URLSearchParams(localVarUrlObj.search);
|
||||||
|
for (const key in localVarQueryParameter) {
|
||||||
|
query.set(key, localVarQueryParameter[key]);
|
||||||
|
}
|
||||||
|
for (const key in options.params) {
|
||||||
|
query.set(key, options.params[key]);
|
||||||
|
}
|
||||||
|
localVarUrlObj.search = (new URLSearchParams(query)).toString();
|
||||||
|
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||||
|
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
||||||
|
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
|
||||||
|
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
|
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
|
||||||
options: localVarRequestOptions,
|
options: localVarRequestOptions,
|
||||||
@ -294,6 +344,20 @@ export const SysSmsApiFp = function(configuration?: Configuration) {
|
|||||||
return axios.request(axiosRequestArgs);
|
return axios.request(axiosRequestArgs);
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @summary 校验短信验证码
|
||||||
|
* @param {SmsVerifyCodeInput} [body]
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
async apiSysSmsVerifyCodePost(body?: SmsVerifyCodeInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultBoolean>>> {
|
||||||
|
const localVarAxiosArgs = await SysSmsApiAxiosParamCreator(configuration).apiSysSmsVerifyCodePost(body, options);
|
||||||
|
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
|
||||||
|
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
|
||||||
|
return axios.request(axiosRequestArgs);
|
||||||
|
};
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -344,6 +408,16 @@ export const SysSmsApiFactory = function (configuration?: Configuration, basePat
|
|||||||
async apiSysSmsTencentSendSmsPhoneNumberPost(phoneNumber: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
|
async apiSysSmsTencentSendSmsPhoneNumberPost(phoneNumber: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
|
||||||
return SysSmsApiFp(configuration).apiSysSmsTencentSendSmsPhoneNumberPost(phoneNumber, options).then((request) => request(axios, basePath));
|
return SysSmsApiFp(configuration).apiSysSmsTencentSendSmsPhoneNumberPost(phoneNumber, options).then((request) => request(axios, basePath));
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @summary 校验短信验证码
|
||||||
|
* @param {SmsVerifyCodeInput} [body]
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
async apiSysSmsVerifyCodePost(body?: SmsVerifyCodeInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultBoolean>> {
|
||||||
|
return SysSmsApiFp(configuration).apiSysSmsVerifyCodePost(body, options).then((request) => request(axios, basePath));
|
||||||
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -399,4 +473,15 @@ export class SysSmsApi extends BaseAPI {
|
|||||||
public async apiSysSmsTencentSendSmsPhoneNumberPost(phoneNumber: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
|
public async apiSysSmsTencentSendSmsPhoneNumberPost(phoneNumber: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
|
||||||
return SysSmsApiFp(this.configuration).apiSysSmsTencentSendSmsPhoneNumberPost(phoneNumber, options).then((request) => request(this.axios, this.basePath));
|
return SysSmsApiFp(this.configuration).apiSysSmsTencentSendSmsPhoneNumberPost(phoneNumber, options).then((request) => request(this.axios, this.basePath));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @summary 校验短信验证码
|
||||||
|
* @param {SmsVerifyCodeInput} [body]
|
||||||
|
* @param {*} [options] Override http request option.
|
||||||
|
* @throws {RequiredError}
|
||||||
|
* @memberof SysSmsApi
|
||||||
|
*/
|
||||||
|
public async apiSysSmsVerifyCodePost(body?: SmsVerifyCodeInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultBoolean>> {
|
||||||
|
return SysSmsApiFp(this.configuration).apiSysSmsVerifyCodePost(body, options).then((request) => request(this.axios, this.basePath));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
70
Web/src/api-services/models/admin-result-list-list-string.ts
Normal file
70
Web/src/api-services/models/admin-result-list-list-string.ts
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/**
|
||||||
|
* Admin.NET 通用权限开发平台
|
||||||
|
* 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
|
||||||
|
*
|
||||||
|
* OpenAPI spec version: 1.0.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by the swagger code generator program.
|
||||||
|
* https://github.com/swagger-api/swagger-codegen.git
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 全局返回结果
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
* @interface AdminResultListListString
|
||||||
|
*/
|
||||||
|
export interface AdminResultListListString {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态码
|
||||||
|
*
|
||||||
|
* @type {number}
|
||||||
|
* @memberof AdminResultListListString
|
||||||
|
*/
|
||||||
|
code?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类型success、warning、error
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof AdminResultListListString
|
||||||
|
*/
|
||||||
|
type?: string | null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 错误信息
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof AdminResultListListString
|
||||||
|
*/
|
||||||
|
message?: string | null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据
|
||||||
|
*
|
||||||
|
* @type {Array<Array<string>>}
|
||||||
|
* @memberof AdminResultListListString
|
||||||
|
*/
|
||||||
|
result?: Array<Array<string>> | null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附加数据
|
||||||
|
*
|
||||||
|
* @type {any}
|
||||||
|
* @memberof AdminResultListListString
|
||||||
|
*/
|
||||||
|
extras?: any | null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 时间
|
||||||
|
*
|
||||||
|
* @type {Date}
|
||||||
|
* @memberof AdminResultListListString
|
||||||
|
*/
|
||||||
|
time?: Date;
|
||||||
|
}
|
||||||
@ -41,6 +41,7 @@ export * from './admin-result-list-enum-entity';
|
|||||||
export * from './admin-result-list-enum-type-output';
|
export * from './admin-result-list-enum-type-output';
|
||||||
export * from './admin-result-list-file-output';
|
export * from './admin-result-list-file-output';
|
||||||
export * from './admin-result-list-int64';
|
export * from './admin-result-list-int64';
|
||||||
|
export * from './admin-result-list-list-string';
|
||||||
export * from './admin-result-list-log-vis-output';
|
export * from './admin-result-list-log-vis-output';
|
||||||
export * from './admin-result-list-menu-output';
|
export * from './admin-result-list-menu-output';
|
||||||
export * from './admin-result-list-pos-output';
|
export * from './admin-result-list-pos-output';
|
||||||
@ -297,6 +298,7 @@ export * from './send-subscribe-message-input';
|
|||||||
export * from './serialization-format';
|
export * from './serialization-format';
|
||||||
export * from './signature-input';
|
export * from './signature-input';
|
||||||
export * from './sm-key-pair-output';
|
export * from './sm-key-pair-output';
|
||||||
|
export * from './sms-verify-code-input';
|
||||||
export * from './sort-version';
|
export * from './sort-version';
|
||||||
export * from './sql-sugar-paged-list-job-detail-output';
|
export * from './sql-sugar-paged-list-job-detail-output';
|
||||||
export * from './sql-sugar-paged-list-oauth-user-output';
|
export * from './sql-sugar-paged-list-oauth-user-output';
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 授权角色接口资源
|
* 授权角色接口黑名单
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
* @interface RoleApiInput
|
* @interface RoleApiInput
|
||||||
|
|||||||
40
Web/src/api-services/models/sms-verify-code-input.ts
Normal file
40
Web/src/api-services/models/sms-verify-code-input.ts
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/**
|
||||||
|
* Admin.NET 通用权限开发平台
|
||||||
|
* 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
|
||||||
|
*
|
||||||
|
* OpenAPI spec version: 1.0.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by the swagger code generator program.
|
||||||
|
* https://github.com/swagger-api/swagger-codegen.git
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
* @interface SmsVerifyCodeInput
|
||||||
|
*/
|
||||||
|
export interface SmsVerifyCodeInput {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手机号码
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof SmsVerifyCodeInput
|
||||||
|
* @example admin
|
||||||
|
*/
|
||||||
|
phone: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证码
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof SmsVerifyCodeInput
|
||||||
|
* @example 123456
|
||||||
|
*/
|
||||||
|
code: string;
|
||||||
|
}
|
||||||
@ -106,4 +106,12 @@ export interface SysOnlineUser {
|
|||||||
* @memberof SysOnlineUser
|
* @memberof SysOnlineUser
|
||||||
*/
|
*/
|
||||||
loginMode?: LoginModeEnum;
|
loginMode?: LoginModeEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录设备
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof SysOnlineUser
|
||||||
|
*/
|
||||||
|
device?: string | null;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,7 +75,7 @@
|
|||||||
<!-- <el-dropdown-item command="/dashboard/home">{{ $t('message.user.dropdown1') }}</el-dropdown-item> -->
|
<!-- <el-dropdown-item command="/dashboard/home">{{ $t('message.user.dropdown1') }}</el-dropdown-item> -->
|
||||||
<el-dropdown-item :icon="Avatar" command="/system/userCenter">{{ $t('message.user.dropdown2') }}</el-dropdown-item>
|
<el-dropdown-item :icon="Avatar" command="/system/userCenter">{{ $t('message.user.dropdown2') }}</el-dropdown-item>
|
||||||
<el-dropdown-item :icon="Loading" command="clearCache">{{ $t('message.user.dropdown3') }}</el-dropdown-item>
|
<el-dropdown-item :icon="Loading" command="clearCache">{{ $t('message.user.dropdown3') }}</el-dropdown-item>
|
||||||
<el-dropdown-item :icon="Guide" divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item>
|
<el-dropdown-item :icon="CircleCloseFilled" divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item>
|
||||||
</el-dropdown-menu>
|
</el-dropdown-menu>
|
||||||
</template>
|
</template>
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
@ -85,7 +85,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="layoutBreadcrumbUser">
|
<script setup lang="ts" name="layoutBreadcrumbUser">
|
||||||
import { defineAsyncComponent, ref, computed, reactive, onMounted, onUnmounted } from 'vue';
|
import { defineAsyncComponent, ref, computed, reactive, onMounted } from 'vue';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import { ElMessageBox, ElMessage, ElNotification } from 'element-plus';
|
import { ElMessageBox, ElMessage, ElNotification } from 'element-plus';
|
||||||
import screenfull from 'screenfull';
|
import screenfull from 'screenfull';
|
||||||
@ -98,7 +98,7 @@ import mittBus from '/@/utils/mitt';
|
|||||||
import { Local, Session } from '/@/utils/storage';
|
import { Local, Session } from '/@/utils/storage';
|
||||||
import Push from 'push.js';
|
import Push from 'push.js';
|
||||||
import { signalR } from '/@/views/system/onlineUser/signalR';
|
import { signalR } from '/@/views/system/onlineUser/signalR';
|
||||||
import { Avatar, Guide, Loading } from '@element-plus/icons-vue';
|
import { Avatar, CircleCloseFilled, Loading } from '@element-plus/icons-vue';
|
||||||
|
|
||||||
import { clearAccessTokens, getAPI } from '/@/utils/axios-utils';
|
import { clearAccessTokens, getAPI } from '/@/utils/axios-utils';
|
||||||
import { SysAuthApi, SysNoticeApi } from '/@/api-services/api';
|
import { SysAuthApi, SysNoticeApi } from '/@/api-services/api';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user