diff --git a/CoreCms.Net.Model/FromBody/FMWxPost.cs b/CoreCms.Net.Model/FromBody/FMWxPost.cs
index 981e125c..ecfb990c 100644
--- a/CoreCms.Net.Model/FromBody/FMWxPost.cs
+++ b/CoreCms.Net.Model/FromBody/FMWxPost.cs
@@ -25,6 +25,13 @@ namespace CoreCms.Net.Model.FromBody
///
[Required(ErrorMessage = "请提交合法数据")]
public string code { get; set; }
+
+
+ ///
+ /// 来源类型(对标GlobalEnumVars下的UserAccountTypes)
+ ///
+ public int type { get; set; } = 2;
+
}
///
diff --git a/CoreCms.Net.Web.WebApi/Controllers/UserController.cs b/CoreCms.Net.Web.WebApi/Controllers/UserController.cs
index dffcc958..75727dad 100644
--- a/CoreCms.Net.Web.WebApi/Controllers/UserController.cs
+++ b/CoreCms.Net.Web.WebApi/Controllers/UserController.cs
@@ -178,102 +178,211 @@ namespace CoreCms.Net.Web.WebApi.Controllers
{
try
{
- var client = _weChatApiHttpClientFactory.CreateWxOpenClient();
- var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken();
- var request = new SnsJsCode2SessionRequest
- {
- JsCode = entity.code,
- AccessToken = accessToken
- };
- var response = await client.ExecuteSnsJsCode2SessionAsync(request, HttpContext.RequestAborted);
- if (response.ErrorCode == (int)WeChatReturnCode.ReturnCode.请求成功)
+ if (entity.type == (int)GlobalEnumVars.UserAccountTypes.微信小程序)
{
- var userInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.openid == response.OpenId);
- if (userInfo == null)
+ var client = _weChatApiHttpClientFactory.CreateWxOpenClient();
+ var accessToken = WeChatCacheAccessTokenHelper.GetWxOpenAccessToken();
+ var request = new SnsJsCode2SessionRequest
{
- userInfo = new CoreCmsUserWeChatInfo
- {
- openid = response.OpenId,
- type = (int)GlobalEnumVars.UserAccountTypes.微信小程序,
- sessionKey = response.SessionKey,
- gender = 1,
- createTime = DateTime.Now,
- unionId = response.UnionId
- };
- await _userWeChatInfoServices.InsertAsync(userInfo);
- }
- else
+ JsCode = entity.code,
+ AccessToken = accessToken
+ };
+
+ var response = await client.ExecuteSnsJsCode2SessionAsync(request, HttpContext.RequestAborted);
+ if (response.ErrorCode == (int)WeChatReturnCode.ReturnCode.请求成功)
{
- if (userInfo.sessionKey != response.SessionKey)
+ var userInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.openid == response.OpenId);
+ if (userInfo == null)
{
- await _userWeChatInfoServices.UpdateAsync(
- p => new CoreCmsUserWeChatInfo() { sessionKey = response.SessionKey, updateTime = DateTime.Now },
- p => p.openid == userInfo.openid);
+ userInfo = new CoreCmsUserWeChatInfo
+ {
+ openid = response.OpenId,
+ type = (int)GlobalEnumVars.UserAccountTypes.微信小程序,
+ sessionKey = response.SessionKey,
+ gender = 1,
+ createTime = DateTime.Now,
+ unionId = response.UnionId
+ };
+ await _userWeChatInfoServices.InsertAsync(userInfo);
}
- }
-
- if (userInfo is { userId: > 0 })
- {
- var user = await _userServices.QueryByClauseAsync(p => p.id == userInfo.userId);
- if (user != null)
+ else
{
- if (user.status == (int)GlobalEnumVars.UserStatus.停用)
+ if (userInfo.sessionKey != response.SessionKey)
{
- jm.status = false;
- jm.msg = "您的账号已经被禁用。";
- return jm;
+ await _userWeChatInfoServices.UpdateAsync(
+ p => new CoreCmsUserWeChatInfo() { sessionKey = response.SessionKey, updateTime = DateTime.Now },
+ p => p.openid == userInfo.openid);
}
+ }
- if (user.isDelete == true)
+ if (userInfo is { userId: > 0 })
+ {
+ var user = await _userServices.QueryByClauseAsync(p => p.id == userInfo.userId);
+ if (user != null)
{
- jm.status = false;
- jm.msg = "您的账号已经被禁用。";
- return jm;
- }
+ if (user.status == (int)GlobalEnumVars.UserStatus.停用)
+ {
+ jm.status = false;
+ jm.msg = "您的账号已经被禁用。";
+ return jm;
+ }
- var claims = new List {
+ if (user.isDelete == true)
+ {
+ jm.status = false;
+ jm.msg = "您的账号已经被禁用。";
+ return jm;
+ }
+
+ var claims = new List {
new Claim(ClaimTypes.Name, user.nickName),
new Claim(JwtRegisteredClaimNames.Jti, user.id.ToString()),
new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(_permissionRequirement.Expiration.TotalSeconds).ToString(CultureInfo.InvariantCulture)) };
- //用户标识
- var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
- identity.AddClaims(claims);
- jm.status = true;
- jm.data = new
- {
- auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement),
- user
- };
- jm.otherData = response.OpenId;
+ //用户标识
+ var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
+ identity.AddClaims(claims);
+ jm.status = true;
+ jm.data = new
+ {
+ auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement),
+ user
+ };
+ jm.otherData = response.OpenId;
- //录入登录日志
- var log = new CoreCmsUserLog
- {
- userId = user.id,
- state = (int)GlobalEnumVars.UserLogTypes.登录,
- ip = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1",
- createTime = DateTime.Now,
- parameters = GlobalEnumVars.UserLogTypes.登录.ToString()
- };
- await _userLogServices.InsertAsync(log);
+ //录入登录日志
+ var log = new CoreCmsUserLog
+ {
+ userId = user.id,
+ state = (int)GlobalEnumVars.UserLogTypes.登录,
+ ip = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1",
+ createTime = DateTime.Now,
+ parameters = GlobalEnumVars.UserLogTypes.登录.ToString()
+ };
+ await _userLogServices.InsertAsync(log);
- return jm;
+ return jm;
+ }
}
+ //注意:生产环境下SessionKey属于敏感信息,不能进行传输!
+ //return new JsonResult(new { success = true, msg = "OK", sessionAuthId = sessionBag.Key, sessionKey = sessionBag.SessionKey, data = jsonResult, sessionBag = sessionBag });
+ jm.status = true;
+ jm.data = response.OpenId;
+ jm.otherData = response.OpenId;
+ //jm.methodDescription = JsonConvert.SerializeObject(sessionBag);
+ jm.msg = "OK";
+ }
+ else
+ {
+ jm.msg = response.ErrorMessage;
}
- //注意:生产环境下SessionKey属于敏感信息,不能进行传输!
- //return new JsonResult(new { success = true, msg = "OK", sessionAuthId = sessionBag.Key, sessionKey = sessionBag.SessionKey, data = jsonResult, sessionBag = sessionBag });
- jm.status = true;
- jm.data = response.OpenId;
- jm.otherData = response.OpenId;
- //jm.methodDescription = JsonConvert.SerializeObject(sessionBag);
- jm.msg = "OK";
}
- else
+ else if (entity.type == (int)GlobalEnumVars.UserAccountTypes.微信公众号)
{
- jm.msg = response.ErrorMessage;
+ var client = _weChatApiHttpClientFactory.CreateWeXinClient();
+ var accessToken = WeChatCacheAccessTokenHelper.GetWeChatAccessToken();
+
+
+
+ var request = new SnsOAuth2AccessTokenRequest()
+ {
+ Code = entity.code,
+ AccessToken = accessToken,
+ GrantType = "authorization_code"
+ };
+
+ var response = await client.ExecuteSnsOAuth2AccessTokenAsync(request, HttpContext.RequestAborted);
+ if (response.ErrorCode == (int)WeChatReturnCode.ReturnCode.请求成功)
+ {
+ var userInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.openid == response.OpenId);
+ if (userInfo == null)
+ {
+ userInfo = new CoreCmsUserWeChatInfo
+ {
+ openid = response.OpenId,
+ type = (int)GlobalEnumVars.UserAccountTypes.微信公众号,
+ sessionKey = response.AccessToken,
+ gender = 1,
+ createTime = DateTime.Now,
+ unionId = response.UnionId
+ };
+ await _userWeChatInfoServices.InsertAsync(userInfo);
+ }
+ else
+ {
+ if (userInfo.sessionKey != response.AccessToken)
+ {
+ await _userWeChatInfoServices.UpdateAsync(
+ p => new CoreCmsUserWeChatInfo() { sessionKey = response.AccessToken, updateTime = DateTime.Now },
+ p => p.openid == userInfo.openid);
+ }
+ }
+
+ if (userInfo is { userId: > 0 })
+ {
+ var user = await _userServices.QueryByClauseAsync(p => p.id == userInfo.userId);
+ if (user != null)
+ {
+ if (user.status == (int)GlobalEnumVars.UserStatus.停用)
+ {
+ jm.status = false;
+ jm.msg = "您的账号已经被禁用。";
+ return jm;
+ }
+
+ if (user.isDelete == true)
+ {
+ jm.status = false;
+ jm.msg = "您的账号已经被禁用。";
+ return jm;
+ }
+
+ var claims = new List {
+ new Claim(ClaimTypes.Name, user.nickName),
+ new Claim(JwtRegisteredClaimNames.Jti, user.id.ToString()),
+ new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(_permissionRequirement.Expiration.TotalSeconds).ToString(CultureInfo.InvariantCulture)) };
+
+ //用户标识
+ var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
+ identity.AddClaims(claims);
+ jm.status = true;
+ jm.data = new
+ {
+ auth = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement),
+ user
+ };
+ jm.otherData = response.OpenId;
+
+ //录入登录日志
+ var log = new CoreCmsUserLog
+ {
+ userId = user.id,
+ state = (int)GlobalEnumVars.UserLogTypes.登录,
+ ip = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1",
+ createTime = DateTime.Now,
+ parameters = GlobalEnumVars.UserLogTypes.登录.ToString()
+ };
+ await _userLogServices.InsertAsync(log);
+
+ return jm;
+ }
+ }
+ //注意:生产环境下SessionKey属于敏感信息,不能进行传输!
+ //return new JsonResult(new { success = true, msg = "OK", sessionAuthId = sessionBag.Key, sessionKey = sessionBag.SessionKey, data = jsonResult, sessionBag = sessionBag });
+ jm.status = true;
+ jm.data = response.OpenId;
+ jm.otherData = response.OpenId;
+ //jm.methodDescription = JsonConvert.SerializeObject(sessionBag);
+ jm.msg = "OK";
+ }
+ else
+ {
+ jm.msg = response.ErrorMessage;
+ }
+
}
+
}
catch (Exception e)
{