This commit is contained in:
parent
725cf1a287
commit
3ae1f99374
|
|
@ -186,6 +186,7 @@
|
|||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
|
|
@ -209,6 +210,7 @@
|
|||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
|
|
@ -1053,6 +1055,7 @@
|
|||
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
|
||||
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
|
|
@ -1078,6 +1081,7 @@
|
|||
"resolved": "https://registry.npmjs.org/@uppy/core/-/core-2.3.4.tgz",
|
||||
"integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@transloadit/prettier-bytes": "0.0.7",
|
||||
"@uppy/store-default": "^2.1.1",
|
||||
|
|
@ -1109,6 +1113,7 @@
|
|||
"resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz",
|
||||
"integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@uppy/companion-client": "^2.2.2",
|
||||
"@uppy/utils": "^4.1.2",
|
||||
|
|
@ -1509,6 +1514,7 @@
|
|||
"resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz",
|
||||
"integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"is-url": "^1.2.4"
|
||||
},
|
||||
|
|
@ -1541,6 +1547,7 @@
|
|||
"resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-1.1.19.tgz",
|
||||
"integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/event-emitter": "^0.3.3",
|
||||
"event-emitter": "^0.3.5",
|
||||
|
|
@ -1571,6 +1578,7 @@
|
|||
"resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-5.1.23.tgz",
|
||||
"integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@uppy/core": "^2.1.1",
|
||||
"@uppy/xhr-upload": "^2.0.3",
|
||||
|
|
@ -1938,6 +1946,7 @@
|
|||
"resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz",
|
||||
"integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"ssr-window": "^3.0.0-alpha.1"
|
||||
}
|
||||
|
|
@ -1961,6 +1970,7 @@
|
|||
"resolved": "https://registry.npmjs.org/echarts/-/echarts-6.0.0.tgz",
|
||||
"integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==",
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"tslib": "2.3.0",
|
||||
"zrender": "6.0.0"
|
||||
|
|
@ -2479,7 +2489,8 @@
|
|||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz",
|
||||
"integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/is-plain-object": {
|
||||
"version": "5.0.0",
|
||||
|
|
@ -2521,6 +2532,7 @@
|
|||
"integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"cssstyle": "^4.1.0",
|
||||
"data-urls": "^5.0.0",
|
||||
|
|
@ -2560,13 +2572,15 @@
|
|||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash-es": {
|
||||
"version": "4.17.22",
|
||||
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz",
|
||||
"integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash-unified": {
|
||||
"version": "1.0.3",
|
||||
|
|
@ -2583,44 +2597,51 @@
|
|||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
|
||||
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash.clonedeep": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
|
||||
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash.debounce": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
|
||||
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash.foreach": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
|
||||
"integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash.isequal": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
|
||||
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
|
||||
"deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash.throttle": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
|
||||
"integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash.toarray": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
|
||||
"integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/loupe": {
|
||||
"version": "3.2.1",
|
||||
|
|
@ -2743,6 +2764,7 @@
|
|||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"nanoid": "bin/nanoid.cjs"
|
||||
},
|
||||
|
|
@ -2837,6 +2859,7 @@
|
|||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
|
|
@ -3041,6 +3064,7 @@
|
|||
"resolved": "https://registry.npmjs.org/slate/-/slate-0.72.8.tgz",
|
||||
"integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"immer": "^9.0.6",
|
||||
"is-plain-object": "^5.0.0",
|
||||
|
|
@ -3064,6 +3088,7 @@
|
|||
"resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.3.tgz",
|
||||
"integrity": "sha512-W2lHLLw2qR2Vv0DcMmcxXqcfdBaIcoN+y/86SmHv8fn4DazEQSH6KN3TjZcWvwujW56OHiiirsbHWZb4vx/0fg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12.17.0"
|
||||
}
|
||||
|
|
@ -3256,6 +3281,7 @@
|
|||
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
|
|
@ -3270,6 +3296,7 @@
|
|||
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.4.4",
|
||||
|
|
@ -4391,6 +4418,7 @@
|
|||
"integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.21.3",
|
||||
"postcss": "^8.4.43",
|
||||
|
|
@ -4457,6 +4485,7 @@
|
|||
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz",
|
||||
"integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-dom": "3.5.26",
|
||||
"@vue/compiler-sfc": "3.5.26",
|
||||
|
|
|
|||
|
|
@ -54,7 +54,8 @@ public class AuthController : ControllerBase
|
|||
var result = await _authService.WechatMiniProgramLoginAsync(
|
||||
request.Code,
|
||||
request.Pid,
|
||||
request.ClickId);
|
||||
request.ClickId,
|
||||
request.PhoneCode);
|
||||
|
||||
if (result.Success && result.LoginResponse != null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,95 +3,95 @@ using MiAssessment.Model.Models.Auth;
|
|||
namespace MiAssessment.Core.Interfaces;
|
||||
|
||||
/// <summary>
|
||||
/// 认证服务接口
|
||||
/// <EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
||||
/// </summary>
|
||||
public interface IAuthService
|
||||
{
|
||||
/// <summary>
|
||||
/// 微信小程序登录
|
||||
/// <EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
/// </summary>
|
||||
/// <param name="code">微信授权code</param>
|
||||
/// <param name="pid">推荐人ID</param>
|
||||
/// <param name="clickId">点击ID</param>
|
||||
/// <returns>登录结果</returns>
|
||||
Task<LoginResult> WechatMiniProgramLoginAsync(string code, int? pid, string? clickId);
|
||||
/// <param name="code"><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩcode</param>
|
||||
/// <param name="pid"><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD>ID</param>
|
||||
/// <param name="clickId"><EFBFBD><EFBFBD><EFBFBD>ID</param>
|
||||
/// <returns><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
Task<LoginResult> WechatMiniProgramLoginAsync(string code, int? pid, string? clickId, string? phoneCode = null);
|
||||
|
||||
/// <summary>
|
||||
/// 手机号验证码登录
|
||||
/// <EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD>¼
|
||||
/// </summary>
|
||||
/// <param name="mobile">手机号</param>
|
||||
/// <param name="code">短信验证码</param>
|
||||
/// <param name="pid">推荐人ID</param>
|
||||
/// <param name="clickId">点击ID</param>
|
||||
/// <returns>登录结果</returns>
|
||||
/// <param name="mobile"><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <param name="code"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD></param>
|
||||
/// <param name="pid"><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD>ID</param>
|
||||
/// <param name="clickId"><EFBFBD><EFBFBD><EFBFBD>ID</param>
|
||||
/// <returns><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
Task<LoginResult> MobileLoginAsync(string mobile, string code, int? pid, string? clickId);
|
||||
|
||||
/// <summary>
|
||||
/// 验证码绑定手机号
|
||||
/// <EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
/// <param name="userId">用户ID</param>
|
||||
/// <param name="mobile">手机号</param>
|
||||
/// <param name="code">短信验证码</param>
|
||||
/// <returns>绑定结果</returns>
|
||||
/// <param name="userId"><EFBFBD>û<EFBFBD>ID</param>
|
||||
/// <param name="mobile"><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <param name="code"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD></param>
|
||||
/// <returns><EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
Task<BindMobileResponse> BindMobileAsync(long userId, string mobile, string code);
|
||||
|
||||
/// <summary>
|
||||
/// 微信授权绑定手机号
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
/// <param name="userId">用户ID</param>
|
||||
/// <param name="wechatCode">微信授权code</param>
|
||||
/// <returns>绑定结果</returns>
|
||||
/// <param name="userId"><EFBFBD>û<EFBFBD>ID</param>
|
||||
/// <param name="wechatCode"><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩcode</param>
|
||||
/// <returns><EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
Task<BindMobileResponse> WechatBindMobileAsync(long userId, string wechatCode);
|
||||
|
||||
/// <summary>
|
||||
/// 记录登录信息
|
||||
/// <EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>Ϣ
|
||||
/// </summary>
|
||||
/// <param name="userId">用户ID</param>
|
||||
/// <param name="device">设备类型</param>
|
||||
/// <param name="deviceInfo">设备信息</param>
|
||||
/// <returns>记录登录响应</returns>
|
||||
/// <param name="userId"><EFBFBD>û<EFBFBD>ID</param>
|
||||
/// <param name="device"><EFBFBD>豸<EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <param name="deviceInfo"><EFBFBD>豸<EFBFBD><EFBFBD>Ϣ</param>
|
||||
/// <returns><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>Ӧ</returns>
|
||||
Task<RecordLoginResponse> RecordLoginAsync(long userId, string? device, string? deviceInfo);
|
||||
|
||||
/// <summary>
|
||||
/// 账号注销
|
||||
/// <EFBFBD>˺<EFBFBD>ע<EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
/// <param name="userId">用户ID</param>
|
||||
/// <param name="type">类型:0=注销 1=取消注销</param>
|
||||
/// <returns>异步任务</returns>
|
||||
/// <param name="userId"><EFBFBD>û<EFBFBD>ID</param>
|
||||
/// <param name="type"><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>0=ע<><D7A2> 1=ȡ<><C8A1>ע<EFBFBD><D7A2></param>
|
||||
/// <returns><EFBFBD>첽<EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
Task LogOffAsync(long userId, int type);
|
||||
|
||||
/// <summary>
|
||||
/// H5绑定手机号(无需验证码)
|
||||
/// H5<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD>룩
|
||||
/// </summary>
|
||||
/// <param name="userId">用户ID</param>
|
||||
/// <param name="mobile">手机号</param>
|
||||
/// <returns>绑定结果</returns>
|
||||
/// <param name="userId"><EFBFBD>û<EFBFBD>ID</param>
|
||||
/// <param name="mobile"><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <returns><EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
Task<BindMobileResponse> BindMobileH5Async(long userId, string mobile);
|
||||
|
||||
#region Refresh Token 相关方法
|
||||
#region Refresh Token <EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
/// <summary>
|
||||
/// 刷新 Token
|
||||
/// ˢ<EFBFBD><EFBFBD> Token
|
||||
/// </summary>
|
||||
/// <param name="refreshToken">Refresh Token</param>
|
||||
/// <param name="ipAddress">客户端 IP 地址</param>
|
||||
/// <returns>刷新结果,包含新的 Access Token 和 Refresh Token</returns>
|
||||
/// <param name="ipAddress"><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD> IP <20><>ַ</param>
|
||||
/// <returns>ˢ<EFBFBD>½<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> Access Token <20><> Refresh Token</returns>
|
||||
Task<RefreshTokenResult> RefreshTokenAsync(string refreshToken, string? ipAddress);
|
||||
|
||||
/// <summary>
|
||||
/// 撤销 Token
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Token
|
||||
/// </summary>
|
||||
/// <param name="refreshToken">要撤销的 Refresh Token</param>
|
||||
/// <param name="ipAddress">客户端 IP 地址</param>
|
||||
/// <returns>异步任务</returns>
|
||||
/// <param name="refreshToken">Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Refresh Token</param>
|
||||
/// <param name="ipAddress"><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD> IP <20><>ַ</param>
|
||||
/// <returns><EFBFBD>첽<EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
Task RevokeTokenAsync(string refreshToken, string? ipAddress);
|
||||
|
||||
/// <summary>
|
||||
/// 撤销用户的所有 Token
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Token
|
||||
/// </summary>
|
||||
/// <param name="userId">用户ID</param>
|
||||
/// <param name="ipAddress">客户端 IP 地址</param>
|
||||
/// <returns>异步任务</returns>
|
||||
/// <param name="userId"><EFBFBD>û<EFBFBD>ID</param>
|
||||
/// <param name="ipAddress"><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD> IP <20><>ַ</param>
|
||||
/// <returns><EFBFBD>첽<EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
Task RevokeAllUserTokensAsync(long userId, string? ipAddress);
|
||||
|
||||
#endregion
|
||||
|
|
|
|||
|
|
@ -60,9 +60,9 @@ public class AuthService : IAuthService
|
|||
/// <><CEA2>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
/// Requirements: 1.1-1.8
|
||||
/// </summary>
|
||||
public async Task<LoginResult> WechatMiniProgramLoginAsync(string code, int? pid, string? clickId)
|
||||
public async Task<LoginResult> WechatMiniProgramLoginAsync(string code, int? pid, string? clickId, string? phoneCode = null)
|
||||
{
|
||||
_logger.LogInformation("[AuthService] <>ŵ<EFBFBD>¼<EFBFBD><C2BC>ʼ<EFBFBD><CABC>code={Code}, pid={Pid}", code, pid);
|
||||
_logger.LogInformation("[AuthService] <>ŵ<EFBFBD>¼<EFBFBD><C2BC>ʼ<EFBFBD><CABC>code={Code}, pid={Pid}, hasPhoneCode={HasPhoneCode}", code, pid, !string.IsNullOrWhiteSpace(phoneCode));
|
||||
|
||||
if (string.IsNullOrWhiteSpace(code))
|
||||
{
|
||||
|
|
@ -132,10 +132,29 @@ public class AuthService : IAuthService
|
|||
{
|
||||
// 1.3 新用户,创建并绑定上级
|
||||
_logger.LogInformation("[AuthService] 用户不存在,开始创建新用户, pid={Pid}", pid);
|
||||
|
||||
// 通过 phoneCode 获取手机号
|
||||
string? mobile = null;
|
||||
if (!string.IsNullOrWhiteSpace(phoneCode))
|
||||
{
|
||||
_logger.LogInformation("[AuthService] 开始通过phoneCode获取手机号");
|
||||
var mobileResult = await _wechatService.GetMobileAsync(phoneCode);
|
||||
if (mobileResult.Success && !string.IsNullOrWhiteSpace(mobileResult.Mobile))
|
||||
{
|
||||
mobile = mobileResult.Mobile;
|
||||
_logger.LogInformation("[AuthService] 手机号获取成功");
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogWarning("[AuthService] 手机号获取失败: {Error}", mobileResult.ErrorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
var createDto = new CreateUserDto
|
||||
{
|
||||
OpenId = openId,
|
||||
UnionId = unionId,
|
||||
Mobile = mobile,
|
||||
Nickname = await GetDefaultNicknameAsync(),
|
||||
Headimg = await GetDefaultAvatarAsync(openId),
|
||||
Pid = pid ?? 0
|
||||
|
|
@ -155,6 +174,19 @@ public class AuthService : IAuthService
|
|||
await _userService.UpdateUserAsync(user.Id, new UpdateUserDto { UnionId = unionId });
|
||||
_logger.LogInformation("[AuthService] unionid更新成功");
|
||||
}
|
||||
|
||||
// 已有用户如果没有手机号,也尝试通过 phoneCode 补充
|
||||
if (string.IsNullOrWhiteSpace(user.Phone) && !string.IsNullOrWhiteSpace(phoneCode))
|
||||
{
|
||||
_logger.LogInformation("[AuthService] 已有用户缺少手机号,尝试通过phoneCode补充");
|
||||
var mobileResult = await _wechatService.GetMobileAsync(phoneCode);
|
||||
if (mobileResult.Success && !string.IsNullOrWhiteSpace(mobileResult.Mobile))
|
||||
{
|
||||
await _userService.UpdateUserAsync(user.Id, new UpdateUserDto { Mobile = mobileResult.Mobile });
|
||||
user.Phone = mobileResult.Mobile;
|
||||
_logger.LogInformation("[AuthService] 手机号补充成功");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 1.5 <20><><EFBFBD><EFBFBD>˫ Token<65><6E>Access Token + Refresh Token<65><6E>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,12 @@ public class WechatLoginRequest
|
|||
[JsonPropertyName("code")]
|
||||
public string Code { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 微信获取手机号的授权code
|
||||
/// </summary>
|
||||
[JsonPropertyName("phoneCode")]
|
||||
public string? PhoneCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 推荐人ID(前端可能传空字符串,所以用string接收)
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name" : "学业邑规划",
|
||||
"appid" : "__UNI__1BAACAB",
|
||||
"appid" : "__UNI__A612028",
|
||||
"description" : "",
|
||||
"versionName" : "1.0.0",
|
||||
"versionCode" : "100",
|
||||
|
|
|
|||
|
|
@ -543,6 +543,7 @@ onLoad((options) => {
|
|||
class="invite-input"
|
||||
type="text"
|
||||
placeholder="请输入5位邀请码"
|
||||
placeholder-style="letter-spacing: 0rpx;"
|
||||
:value="inviteCode"
|
||||
@input="onInviteCodeInput"
|
||||
maxlength="5"
|
||||
|
|
@ -947,7 +948,7 @@ onLoad((options) => {
|
|||
font-size: $font-size-lg;
|
||||
color: $text-color;
|
||||
text-align: center;
|
||||
letter-spacing: 8rpx;
|
||||
letter-spacing: 16rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user