From 7e00eafd0a519b48b69dd209026cfe3a9cf353c2 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Wed, 16 Aug 2023 09:16:59 +0800
Subject: [PATCH] 微信登录设置标识

---
 skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/endpoint/BladeTokenEndPoint.java       |    8 +++++++-
 skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/WxPhoneNumberTokenGranter.java |    9 +++++++++
 skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java              |    5 +++++
 3 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/endpoint/BladeTokenEndPoint.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/endpoint/BladeTokenEndPoint.java
index 3478399..1515524 100644
--- a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/endpoint/BladeTokenEndPoint.java
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/endpoint/BladeTokenEndPoint.java
@@ -62,7 +62,7 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-import static cn.gistack.common.cache.CacheNames.OAUTH_KEY;
+import static cn.gistack.common.cache.CacheNames.*;
 import static org.springblade.core.cache.constant.CacheConstant.*;
 
 /**
@@ -160,6 +160,8 @@
 		String url = WX_GET_PHONE_NUMBER + "?access_token=" + wxAccessToken;
 		//向微信接口发起请求获取手机号
 
+
+
 		RestTemplate template = new RestTemplate();
 		Map<String, Object> params = new LinkedHashMap<>();
 		params.put("code", code);
@@ -167,6 +169,10 @@
 		JSONObject resultObj = (JSONObject) JSONObject.parse(result);
 		JSONObject phoneInfo = (JSONObject) resultObj.get("phone_info");
 		String phoneNumber = phoneInfo.get("phoneNumber").toString();
+
+		//把code存入redis作为登录标识(有效时长300秒)
+		bladeRedis.setEx(WX_KEY + phoneNumber,code,5*60L);
+
 		R<User> userR = userClient.userByAccount("000000", phoneNumber);
 		if (userR.getData() != null) {
 			return R.data(phoneNumber);
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/WxPhoneNumberTokenGranter.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/WxPhoneNumberTokenGranter.java
index 93a20f7..50902da 100644
--- a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/WxPhoneNumberTokenGranter.java
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/WxPhoneNumberTokenGranter.java
@@ -44,6 +44,15 @@
 	protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
 		Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
 		String phone = parameters.get("username");
+		String code = parameters.get("password");
+
+		//password和redis中的对比
+		String redisCode = bladeRedis.get(CacheNames.WX_KEY + phone);
+		// 判断验证码
+		if (code == null || !StringUtil.equalsIgnoreCase(redisCode, code)) {
+			throw new UserDeniedAuthorizationException("登录失败");
+		}
+
 		// 通过手机号查询用户
 		Authentication userAuth = new UsernamePasswordAuthenticationToken(phone, "CUSTOM_LOGIN_WX");
 		((AbstractAuthenticationToken) userAuth).setDetails(parameters);
diff --git a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java
index 1a447d2..6e26a92 100644
--- a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java
+++ b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java
@@ -66,4 +66,9 @@
 	 */
 	String USER_FAIL_KEY = "blade:user::blade:fail:";
 
+	/**
+	 * 微信验证码key
+	 */
+	String WX_KEY = "blade:auth::blade:wx";
+
 }

--
Gitblit v1.9.3