【新增】jwt授权认证方式,增加AES加密解密处理,防止前端进行渗透解密伪造Token可能存在。

This commit is contained in:
jianweie
2024-05-08 22:20:04 +08:00
parent 5be1f7789b
commit d517d0d064
10 changed files with 151 additions and 48 deletions

View File

@@ -24,6 +24,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using NETCore.Encrypt;
namespace CoreCms.Net.Auth
{
@@ -100,6 +101,19 @@ namespace CoreCms.Net.Auth
o.TokenValidationParameters = tokenValidationParameters;
o.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var token = context.Request.Headers["Authorization"].ObjectToString().Replace("Bearer ", "");
if (string.IsNullOrEmpty(token))
{
context.Response.Headers.Append("Token-Error-Token", "authorization decryption failure!");
}
else
{
context.Token = EncryptProvider.AESDecrypt(token, AppSettingsConstVars.JwtConfigSecretKey);
}
return Task.CompletedTask;
},
OnChallenge = context =>
{
context.Response.Headers.Append("Token-Error", context.ErrorDescription);
@@ -108,7 +122,19 @@ namespace CoreCms.Net.Auth
OnAuthenticationFailed = context =>
{
var token = context.Request.Headers["Authorization"].ObjectToString().Replace("Bearer ", "");
var jwtToken = (new JwtSecurityTokenHandler()).ReadJwtToken(token);
if (string.IsNullOrEmpty(token))
{
context.Response.Headers.Append("Token-Error-Token", "token is wrong!");
}
//进行aes解密
var decodeToken = EncryptProvider.AESDecrypt(token, AppSettingsConstVars.JwtConfigSecretKey);
if (string.IsNullOrEmpty(decodeToken))
{
context.Response.Headers.Append("Token-Error-Token", "token decryption failure!");
}
var jwtToken = (new JwtSecurityTokenHandler()).ReadJwtToken(decodeToken);
if (jwtToken.Issuer != issuer)
{
@@ -205,6 +231,19 @@ namespace CoreCms.Net.Auth
o.TokenValidationParameters = tokenValidationParameters;
o.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var token = context.Request.Headers["Authorization"].ObjectToString().Replace("Bearer ", "");
if (string.IsNullOrEmpty(token))
{
context.Response.Headers.Append("Token-Error-Token", "authorization decryption failure!");
}
else
{
context.Token = EncryptProvider.AESDecrypt(token, AppSettingsConstVars.JwtConfigSecretKey);
}
return Task.CompletedTask;
},
OnChallenge = context =>
{
context.Response.Headers.Append("Token-Error", context.ErrorDescription);
@@ -213,7 +252,19 @@ namespace CoreCms.Net.Auth
OnAuthenticationFailed = context =>
{
var token = context.Request.Headers["Authorization"].ObjectToString().Replace("Bearer ", "");
var jwtToken = (new JwtSecurityTokenHandler()).ReadJwtToken(token);
if (string.IsNullOrEmpty(token))
{
context.Response.Headers.Append("Token-Error-Token", "token is wrong!");
}
//进行aes解密
var decodeToken = EncryptProvider.AESDecrypt(token, AppSettingsConstVars.JwtConfigSecretKey);
if (string.IsNullOrEmpty(decodeToken))
{
context.Response.Headers.Append("Token-Error-Token", "token decryption failure!");
}
var jwtToken = (new JwtSecurityTokenHandler()).ReadJwtToken(decodeToken);
if (jwtToken.Issuer != issuer)
{

View File

@@ -7,6 +7,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
<PackageReference Include="NETCore.Encrypt" Version="2.1.1" />
</ItemGroup>
<ItemGroup>

View File

@@ -19,7 +19,7 @@ namespace CoreCms.Net.Auth.Policys
/// <summary>
/// JWTToken生成类
/// </summary>
public class JwtToken
public static class JwtToken
{
/// <summary>
/// 获取基于JWT的Token
@@ -27,7 +27,7 @@ namespace CoreCms.Net.Auth.Policys
/// <param name="claims">需要在登陆的时候配置</param>
/// <param name="permissionRequirement">在startup中定义的参数</param>
/// <returns></returns>
public static dynamic BuildJwtToken(Claim[] claims, PermissionRequirement permissionRequirement)
public static JwtTokenResponseJson BuildJwtToken(Claim[] claims, PermissionRequirement permissionRequirement)
{
var now = DateTime.Now;
// 实例化JwtSecurityToken

View File

@@ -31,6 +31,7 @@ using CoreCms.Net.Utility.Helper;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using NETCore.Encrypt;
using SqlSugar;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinUserInfoBatchGetRequest.Types;
@@ -62,6 +63,7 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
private readonly ICoreCmsPromotionServices _coreCmsPromotionServices;
private readonly ICoreCmsCouponServices _coreCmsCouponServices;
private readonly ICoreCmsAliPayUserInfoServices _aliPayUserInfoServices;
public CoreCmsUserServices(IUnitOfWork unitOfWork
@@ -72,7 +74,7 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices,
PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor,
ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider,
ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionRepository distributionRepository, ICoreCmsPromotionServices coreCmsPromotionServices, ICoreCmsCouponServices coreCmsCouponServices)
ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionRepository distributionRepository, ICoreCmsPromotionServices coreCmsPromotionServices, ICoreCmsCouponServices coreCmsCouponServices, ICoreCmsAliPayUserInfoServices aliPayUserInfoServices)
{
_dal = dal;
BaseDal = dal;
@@ -92,6 +94,7 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
_distributionRepository = distributionRepository;
_coreCmsPromotionServices = coreCmsPromotionServices;
_coreCmsCouponServices = coreCmsCouponServices;
_aliPayUserInfoServices = aliPayUserInfoServices;
}
@@ -568,7 +571,7 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
/// 手机短信验证码登陆,同时兼有手机短信注册的功能,还有第三方账户绑定的功能
/// </summary>
/// <param name="entity">实体数据</param>
/// <param name="loginType">登录方式(1普通,2短信,3微信小程序拉取手机号)</param>
/// <param name="loginType">登录方式(1普通,2短信,3微信小程序拉取手机号,4支付宝小程序拉取手机号)</param>
/// <param name="platform"></param>
/// <returns></returns>
public async Task<WebApiCallBack> SmsLogin(FMComAccountCreate entity,
@@ -621,10 +624,9 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
userInfo.createTime = DateTime.Now;
//没有此用户,创建此用户
if (!string.IsNullOrEmpty(entity.sessionAuthId))
if (!string.IsNullOrEmpty(entity.sessionAuthId) && loginType == (int)GlobalEnumVars.LoginType.WeChatPhoneNumber)
{
var wxUserInfo =
await _userWeChatInfoServices.QueryByClauseAsync(p => p.openid == entity.sessionAuthId);
var wxUserInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.openid == entity.sessionAuthId);
if (wxUserInfo != null)
{
if (string.IsNullOrEmpty(entity.avatar)) entity.avatar = wxUserInfo.avatar;
@@ -633,6 +635,17 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
userInfo.userWx = wxUserInfo?.id ?? 0;
}
}
//else if (!string.IsNullOrEmpty(entity.sessionAuthId) && loginType == (int)GlobalEnumVars.LoginType.AliPhoneNumber)
//{
// var aliUserInfo = await _aliPayUserInfoServices.QueryByClauseAsync(p => p.userId == entity.sessionAuthId || p.openId== entity.sessionAuthId);
// if (aliUserInfo != null)
// {
// //if (string.IsNullOrEmpty(entity.avatar)) entity.avatar = AliUserInfo.avatar;
// //if (string.IsNullOrEmpty(entity.nickname)) entity.nickname = wxUserInfo.nickName;
// //userInfo.sex = AliUserInfo?.gender ?? 3;
// userInfo.userWx = aliUserInfo?.id ?? 0;
// }
//}
var allConfigs = await _settingServices.GetConfigDictionaries();
@@ -643,28 +656,17 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
}
else
{
var defaultImage =
CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopDefaultImage);
var defaultImage = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopDefaultImage);
userInfo.avatarImage = defaultImage;
}
userInfo.nickName = !string.IsNullOrEmpty(entity.nickname)
? entity.nickname
: UserHelper.FormatMobile(entity.mobile);
userInfo.nickName = !string.IsNullOrEmpty(entity.nickname) ? entity.nickname : UserHelper.FormatMobile(entity.mobile);
if (entity.invitecode > 0)
{
var pid = UserHelper.GetUserIdByShareCode(entity.invitecode);
var pInfo = await _dal.QueryByClauseAsync(p => p.id == pid);
if (pInfo != null)
{
userInfo.parentId = pid;
}
//else
//{
// jm.msg = GlobalErrorCodeVars.Code10014;
// return jm;
//}
userInfo.parentId = pInfo != null ? pid : 0;
}
if (!string.IsNullOrEmpty(entity.password))
@@ -675,7 +677,6 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
jm.msg = GlobalErrorCodeVars.Code11009;
return jm;
}
userInfo.passWord = CommonHelper.EnPassword(entity.password, userInfo.createTime);
}
else
@@ -688,22 +689,14 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
userInfo.grade = userGradeInfo?.id ?? 0;
var userId = await _dal.InsertAsync(userInfo);
if (userId == 0)
{
jm.msg = GlobalErrorCodeVars.Code10000;
return jm;
}
if (userId > 0)
{
if (entity.invitecode > 0 && userInfo.parentId > 0)
{
var inviterUserIntegral = CommonHelper
.GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral)
.ObjectToInt(); //是否开启积分功能
var inviterUserIntegral = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral).ObjectToInt(); //是否开启积分功能
if (inviterUserIntegral > 0)
await _userPointLogServices.SetPoint(userInfo.parentId, inviterUserIntegral,
(int)GlobalEnumVars.UserPointSourceTypes.PointTypeInviterUser, "发展用户:" + userId + "赠送积分");
await _userPointLogServices.SetPoint(userInfo.parentId, inviterUserIntegral, (int)GlobalEnumVars.UserPointSourceTypes.PointTypeInviterUser, "发展用户:" + userId + "赠送积分");
}
//是否默认注册分销商
@@ -727,6 +720,11 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
await _distributionRepository.InsertAsync(iData);
}
}
else if (userId == 0)
{
jm.msg = GlobalErrorCodeVars.Code10000;
return jm;
}
userInfo = await _dal.QueryByIdAsync(userId);
@@ -756,7 +754,7 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
}
//判断是否是小程序里的微信登陆,如果是,就给他绑定微信账号
if (!string.IsNullOrEmpty(entity.sessionAuthId))
if (!string.IsNullOrEmpty(entity.sessionAuthId) && loginType == (int)GlobalEnumVars.LoginType.WeChatPhoneNumber)
{
var updateAsync = await _userWeChatInfoServices.UpdateAsync(p => new CoreCmsUserWeChatInfo() { userId = userInfo.id }, p => p.openid == entity.sessionAuthId);
if (updateAsync)
@@ -768,7 +766,6 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
//会导致微信数据报错()
//2023-05-05 屏蔽此代码是为了让公众号小程序实现多openid指向同一个账号但是也存在问题就是多了之后的解绑问题应该做个登录设备管理。
//await _userWeChatInfoServices.UpdateAsync(p => new CoreCmsUserWeChatInfo() { userId = 0 }, p => p.openid != entity.sessionAuthId && p.userId == userInfo.id);
}
@@ -780,6 +777,10 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
}
}
else if (!string.IsNullOrEmpty(entity.sessionAuthId) && loginType == (int)GlobalEnumVars.LoginType.AliPhoneNumber)
{
await _aliPayUserInfoServices.UpdateAsync(p => new CoreCmsAliPayUserInfo() { userInfoId = userInfo.id }, p => p.openId == entity.sessionAuthId || p.userId == entity.sessionAuthId);
}
if (userInfo.status == (int)GlobalEnumVars.UserStatus.)
{
@@ -799,7 +800,13 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
//用户标识
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
identity.AddClaims(claims);
jm.data = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
//返回处理结果集
var auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
//对token进行非对称加密
auth.token = EncryptProvider.AESEncrypt(auth.token, AppSettingsConstVars.JwtConfigSecretKey);
jm.data = auth;
}
else
{
@@ -875,7 +882,6 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
#endregion
#region
/// <summary>

View File

@@ -31,6 +31,7 @@ using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Net.Http.Headers;
using NETCore.Encrypt;
namespace CoreCms.Net.Web.Admin.Controllers
{
@@ -124,13 +125,16 @@ namespace CoreCms.Net.Web.Admin.Controllers
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
identity.AddClaims(claims);
var token = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
//返回处理结果集
var auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
//对token进行非对称加密
auth.token = EncryptProvider.AESEncrypt(auth.token, AppSettingsConstVars.JwtConfigSecretKey);
jm.code = 0;
jm.msg = "认证成功";
jm.data = new
{
token,
token = auth,
loginUrl = "Panel.html"
};

View File

@@ -61,6 +61,7 @@
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.0" />
<PackageReference Include="MySql.Data" Version="8.2.0" />
<PackageReference Include="NETCore.Encrypt" Version="2.1.1" />
<PackageReference Include="NLog" Version="5.2.7" />
<PackageReference Include="NLog.Database" Version="5.2.7" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.7" />

View File

@@ -16,6 +16,7 @@ using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.FromBody;
using CoreCms.Net.Configuration;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.WeDataQueryBindListResponse.Types;
using NETCore.Encrypt;
namespace CoreCms.Net.Web.WebApi.Controllers.AliPayOAuth
{
@@ -137,10 +138,16 @@ namespace CoreCms.Net.Web.WebApi.Controllers.AliPayOAuth
//用户标识
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
identity.AddClaims(claims);
//返回处理结果集
var auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
//对token进行非对称加密
auth.token = EncryptProvider.AESEncrypt(auth.token, AppSettingsConstVars.JwtConfigSecretKey);
jm.status = true;
jm.data = new
{
auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement),
auth,
user
};
jm.otherData = result.UserId;

View File

@@ -48,6 +48,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using NETCore.Encrypt;
using Newtonsoft.Json;
using Nito.AsyncEx;
using NLog;
@@ -252,10 +253,16 @@ namespace CoreCms.Net.Web.WebApi.Controllers
//用户标识
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
identity.AddClaims(claims);
//返回处理结果集
var auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
//对token进行非对称加密
auth.token = EncryptProvider.AESEncrypt(auth.token, AppSettingsConstVars.JwtConfigSecretKey);
jm.status = true;
jm.data = new
{
auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement),
auth,
user
};
jm.otherData = response.OpenId;
@@ -355,10 +362,16 @@ namespace CoreCms.Net.Web.WebApi.Controllers
//用户标识
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
identity.AddClaims(claims);
//返回处理结果集
var auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
//对token进行非对称加密
auth.token = EncryptProvider.AESEncrypt(auth.token, AppSettingsConstVars.JwtConfigSecretKey);
jm.status = true;
jm.data = new
{
auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement),
auth,
user
};
jm.otherData = response.OpenId;
@@ -468,8 +481,14 @@ namespace CoreCms.Net.Web.WebApi.Controllers
//用户标识
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
identity.AddClaims(claims);
//返回处理结果集
var auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
//对token进行非对称加密
auth.token = EncryptProvider.AESEncrypt(auth.token, AppSettingsConstVars.JwtConfigSecretKey);
jm.status = true;
jm.data = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
jm.data = auth;
//录入登录日志
var log = new CoreCmsUserLog();
@@ -801,9 +820,15 @@ namespace CoreCms.Net.Web.WebApi.Controllers
//用户标识
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
identity.AddClaims(claims);
//返回处理结果集
var auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
//对token进行非对称加密
auth.token = EncryptProvider.AESEncrypt(auth.token, AppSettingsConstVars.JwtConfigSecretKey);
jm.status = true;
jm.msg = "注册成功";
jm.data = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
jm.data = auth;
//录入登录日志
var log = new CoreCmsUserLog();
log.userId = id;

View File

@@ -67,6 +67,7 @@
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.0" />
<PackageReference Include="MySql.Data" Version="8.2.0" />
<PackageReference Include="NETCore.Encrypt" Version="2.1.1" />
<PackageReference Include="Nito.AsyncEx" Version="5.1.2" />
<PackageReference Include="NLog" Version="5.2.7" />
<PackageReference Include="NLog.Database" Version="5.2.7" />

View File

@@ -1081,7 +1081,7 @@
用户操作事件
</summary>
</member>
<member name="M:CoreCms.Net.Web.WebApi.Controllers.UserController.#ctor(CoreCms.Net.Auth.HttpContextUser.IHttpContextUser,CoreCms.Net.IServices.ICoreCmsUserWeChatInfoServices,CoreCms.Net.IServices.ICoreCmsUserServices,CoreCms.Net.Auth.Policys.PermissionRequirement,CoreCms.Net.IServices.ICoreCmsSmsServices,CoreCms.Net.IServices.ICoreCmsUserGradeServices,CoreCms.Net.IServices.ICoreCmsUserLogServices,Microsoft.AspNetCore.Http.IHttpContextAccessor,CoreCms.Net.IServices.ICoreCmsGoodsServices,CoreCms.Net.IServices.ICoreCmsGoodsBrowsingServices,CoreCms.Net.IServices.ICoreCmsCartServices,CoreCms.Net.IServices.ICoreCmsGoodsCollectionServices,CoreCms.Net.IServices.ICoreCmsUserShipServices,CoreCms.Net.IServices.ICoreCmsAreaServices,CoreCms.Net.IServices.ICoreCmsBillPaymentsServices,CoreCms.Net.IServices.ICoreCmsGoodsCommentServices,CoreCms.Net.IServices.ICoreCmsUserBankCardServices,CoreCms.Net.IServices.ICoreCmsUserTocashServices,CoreCms.Net.IServices.ICoreCmsUserBalanceServices,CoreCms.Net.IServices.ICoreCmsInvoiceServices,CoreCms.Net.IServices.ICoreCmsUserPointLogServices,CoreCms.Net.IServices.ICoreCmsShareServices,CoreCms.Net.IServices.ICoreCmsSettingServices,CoreCms.Net.IServices.ICoreCmsServicesServices,Microsoft.Extensions.Options.IOptions{CoreCms.Net.WeChat.Service.Options.WeChatOptions},CoreCms.Net.IServices.ICoreCmsUserServicesOrderServices,CoreCms.Net.IServices.ICoreCmsUserServicesTicketServices,CoreCms.Net.IServices.ICoreCmsStoreServices,CoreCms.Net.IServices.ICoreCmsCouponServices,CoreCms.Net.IServices.ICoreCmsOrderServices,CoreCms.Net.WeChat.Service.HttpClients.IWeChatApiHttpClientFactory,CoreCms.Net.Caching.AutoMate.RedisCache.IRedisOperationRepository)">
<member name="M:CoreCms.Net.Web.WebApi.Controllers.UserController.#ctor(CoreCms.Net.Auth.HttpContextUser.IHttpContextUser,CoreCms.Net.IServices.ICoreCmsUserWeChatInfoServices,CoreCms.Net.IServices.ICoreCmsUserServices,CoreCms.Net.Auth.Policys.PermissionRequirement,CoreCms.Net.IServices.ICoreCmsSmsServices,CoreCms.Net.IServices.ICoreCmsUserGradeServices,CoreCms.Net.IServices.ICoreCmsUserLogServices,Microsoft.AspNetCore.Http.IHttpContextAccessor,CoreCms.Net.IServices.ICoreCmsGoodsServices,CoreCms.Net.IServices.ICoreCmsGoodsBrowsingServices,CoreCms.Net.IServices.ICoreCmsCartServices,CoreCms.Net.IServices.ICoreCmsGoodsCollectionServices,CoreCms.Net.IServices.ICoreCmsUserShipServices,CoreCms.Net.IServices.ICoreCmsAreaServices,CoreCms.Net.IServices.ICoreCmsBillPaymentsServices,CoreCms.Net.IServices.ICoreCmsGoodsCommentServices,CoreCms.Net.IServices.ICoreCmsUserBankCardServices,CoreCms.Net.IServices.ICoreCmsUserTocashServices,CoreCms.Net.IServices.ICoreCmsUserBalanceServices,CoreCms.Net.IServices.ICoreCmsInvoiceServices,CoreCms.Net.IServices.ICoreCmsUserPointLogServices,CoreCms.Net.IServices.ICoreCmsShareServices,CoreCms.Net.IServices.ICoreCmsSettingServices,CoreCms.Net.IServices.ICoreCmsServicesServices,Microsoft.Extensions.Options.IOptions{CoreCms.Net.WeChat.Service.Options.WeChatOptions},CoreCms.Net.IServices.ICoreCmsUserServicesOrderServices,CoreCms.Net.IServices.ICoreCmsUserServicesTicketServices,CoreCms.Net.IServices.ICoreCmsStoreServices,CoreCms.Net.IServices.ICoreCmsCouponServices,CoreCms.Net.IServices.ICoreCmsOrderServices,CoreCms.Net.WeChat.Service.HttpClients.IWeChatApiHttpClientFactory,CoreCms.Net.Caching.AutoMate.RedisCache.IRedisOperationRepository,CoreCms.Net.IServices.ICoreCmsAliPayUserInfoServices,Microsoft.Extensions.Options.IOptions{CoreCms.Net.Model.Options.AliPayOptions})">
<summary>
构造函数
</summary>
@@ -1107,7 +1107,7 @@
<param name="entity"></param>
<returns></returns>
</member>
<member name="M:CoreCms.Net.Web.WebApi.Controllers.UserController.SmsLogin(CoreCms.Net.Model.FromBody.FMWxAccountCreate)">
<member name="M:CoreCms.Net.Web.WebApi.Controllers.UserController.SmsLogin(CoreCms.Net.Model.FromBody.FMComAccountCreate)">
<summary>
手机短信验证码登陆,同时兼有手机短信注册的功能,还有第三方账户绑定的功能
</summary>
@@ -1121,7 +1121,14 @@
<param name="entity"></param>
<returns></returns>
</member>
<member name="M:CoreCms.Net.Web.WebApi.Controllers.UserController.SmsLogin2(CoreCms.Net.Model.FromBody.FMWxAccountCreate)">
<member name="M:CoreCms.Net.Web.WebApi.Controllers.UserController.DecryptPhoneNumberByAli(CoreCms.Net.Model.FromBody.FMAliLoginDecryptPhoneNumber)">
<summary>
支付宝小程序授权拉取手机号码
</summary>
<param name="entity"></param>
<returns></returns>
</member>
<member name="M:CoreCms.Net.Web.WebApi.Controllers.UserController.SmsLogin2(CoreCms.Net.Model.FromBody.FMComAccountCreate)">
<summary>
用户短信注册并返回jwt token(弃用)
</summary>