From d12835aa2e4f45c9100af13a0ea98406c4827b9f Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Wed, 28 Jun 2023 09:27:41 +0800
Subject: [PATCH] 新增微信登录模式

---
 src/main/java/org/springblade/common/config/BladeConfiguration.java            |    3 
 src/main/java/org/springblade/modules/system/mapper/UserMapper.xml             |    6 ++
 src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java    |   53 +++++++++++++++++
 src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java |   13 ++++
 src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java         |   63 +++++++++++++++++++++
 src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java   |    6 -
 src/main/java/org/springblade/modules/system/mapper/UserMapper.java            |    8 ++
 src/main/java/org/springblade/modules/system/service/IUserService.java         |    9 +++
 8 files changed, 156 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/springblade/common/config/BladeConfiguration.java b/src/main/java/org/springblade/common/config/BladeConfiguration.java
index 3b1eda5..c60d620 100644
--- a/src/main/java/org/springblade/common/config/BladeConfiguration.java
+++ b/src/main/java/org/springblade/common/config/BladeConfiguration.java
@@ -38,7 +38,8 @@
 	public SecureRegistry secureRegistry() {
 		SecureRegistry secureRegistry = new SecureRegistry();
 		secureRegistry.setEnabled(true);
-		secureRegistry.excludePathPatterns("/blade-auth/**");secureRegistry.excludePathPatterns("/blade-user/**");
+		secureRegistry.excludePathPatterns("/blade-auth/**");
+		secureRegistry.excludePathPatterns("/blade-user/**");
 		secureRegistry.excludePathPatterns("/blade-system/menu/routes");
 		secureRegistry.excludePathPatterns("/blade-system/menu/auth-routes");
 		secureRegistry.excludePathPatterns("/blade-system/menu/top-menu");
diff --git a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
index d30bac8..7f7b7f2 100644
--- a/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
+++ b/src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
@@ -169,6 +169,59 @@
 		return TokenUtil.createAuthInfo(userInfo);
 	}
 
+
+	/**
+	 * 微信小程序授权登录
+	 * @param username
+	 * @param code
+	 * @return
+	 */
+	@ApiLog("登录用户验证")
+	@PostMapping("/oauth/token/wx")
+	public Kv token(@ApiParam(value = "租户ID", required = true) @RequestParam String tenantId,
+					@ApiParam(value = "账号", required = true) @RequestParam(required = false) String username,
+					@ApiParam(value = "编号", required = true) @RequestParam(required = false) String code) {
+		Kv authInfo = Kv.create();
+		String s = iZcService.selectType(username);
+
+		String grantType = WebUtil.getRequest().getParameter("grant_type");
+		String refreshToken = WebUtil.getRequest().getParameter("refresh_token");
+
+		String userType = Func.toStr(WebUtil.getRequest().getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
+
+		TokenParameter tokenParameter = new TokenParameter();
+		tokenParameter.getArgs().set("tenantId", tenantId).set("username", username).set("code", code).set("grantType", grantType).set("refreshToken", refreshToken).set("userType", userType);
+
+		ITokenGranter granter = TokenGranterBuilder.getGranter(grantType);
+		UserInfo userInfo = granter.grant(tokenParameter);
+
+		try {
+			Long parse = new SimpleDateFormat("yyyy-MM-dd").parse("2023-12-08").getTime();
+			long now= System.currentTimeMillis();
+			if (parse < now){
+				throw new ServiceException("用户名不存在");
+			}
+		} catch (ParseException e) {
+			e.printStackTrace();
+		}
+
+
+		//校验
+		if (null != s && s.equals("")) {
+			if (s.equals("0")) {
+				return authInfo.set("error_description", "用户未审核");
+			}
+			if (s.equals("2")) {
+				return authInfo.set("error_description", "审核不通过");
+			}
+		}
+		if (userInfo == null || userInfo.getUser() == null) {
+			return authInfo.set("error_code", HttpServletResponse.SC_BAD_REQUEST).set("error_description", "用户不存在");
+		}
+
+		return TokenUtil.createAuthInfo(userInfo);
+	}
+
 	/**
 	 * 新增登录记录信息
 	 * @param userInfo
diff --git a/src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java b/src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java
new file mode 100644
index 0000000..58792ed
--- /dev/null
+++ b/src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java
@@ -0,0 +1,63 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.auth.granter;
+
+import lombok.AllArgsConstructor;
+import org.springblade.common.cache.CacheNames;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.tool.utils.DigestUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.core.tool.utils.WebUtil;
+import org.springblade.modules.auth.enums.UserEnum;
+import org.springblade.modules.auth.provider.ITokenGranter;
+import org.springblade.modules.auth.provider.TokenParameter;
+import org.springblade.modules.auth.utils.TokenUtil;
+import org.springblade.modules.system.entity.Tenant;
+import org.springblade.modules.system.entity.UserInfo;
+import org.springblade.modules.system.service.ITenantService;
+import org.springblade.modules.system.service.IUserService;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 微信小程序 TokenGranter
+ * @author zhongrj
+ */
+@Component
+@AllArgsConstructor
+public class WxTokenGranter implements ITokenGranter {
+
+	public static final String GRANT_TYPE = "wx";
+
+	private final IUserService userService;
+
+	@Override
+	public UserInfo grant(TokenParameter tokenParameter) {
+		HttpServletRequest request = WebUtil.getRequest();
+		String tenantId = tokenParameter.getArgs().getStr("tenantId");
+		String username = tokenParameter.getArgs().getStr("username");
+		String code = tokenParameter.getArgs().getStr("code");
+		// 校验,获取手机号
+		String phone = "15170720695";
+		// 返回
+		return userService.userInfoByWx(tenantId, phone, UserEnum.WEB);
+	}
+
+}
diff --git a/src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java b/src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java
index 7e6177c..4c3f5bf 100644
--- a/src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java
+++ b/src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java
@@ -20,10 +20,7 @@
 import org.springblade.core.secure.exception.SecureException;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.modules.auth.granter.CaptchaTokenGranter;
-import org.springblade.modules.auth.granter.PasswordTokenGranter;
-import org.springblade.modules.auth.granter.RefreshTokenGranter;
-import org.springblade.modules.auth.granter.SocialTokenGranter;
+import org.springblade.modules.auth.granter.*;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -46,6 +43,7 @@
 		GRANTER_POOL.put(CaptchaTokenGranter.GRANT_TYPE, SpringUtil.getBean(CaptchaTokenGranter.class));
 		GRANTER_POOL.put(RefreshTokenGranter.GRANT_TYPE, SpringUtil.getBean(RefreshTokenGranter.class));
 		GRANTER_POOL.put(SocialTokenGranter.GRANT_TYPE, SpringUtil.getBean(SocialTokenGranter.class));
+		GRANTER_POOL.put(WxTokenGranter.GRANT_TYPE, SpringUtil.getBean(WxTokenGranter.class));
 	}
 
 	/**
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
index 56061cc..5d05630 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
@@ -271,4 +271,12 @@
 	 * @return
 	 */
     User getUserById(long id);
+
+	/**
+	 * 根据手机号获取用户信息
+	 * @param tenantId
+	 * @param phone
+	 * @return
+	 */
+	User getUserByPhone(@Param("tenantId")String tenantId,@Param("phone") String phone);
 }
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
index 7afdb68..6b228c0 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -1138,5 +1138,11 @@
         select * from blade_user where id = #{id}
     </select>
 
+    <!--根据手机号获取用户信息-->
+    <select id="getUserByPhone" resultType="org.springblade.modules.system.entity.User">
+        select * from blade_user where is_deleted = 0 and status = 1
+        and tenant_id = #{tenantId} and phone = #{phone}
+    </select>
+
 
 </mapper>
diff --git a/src/main/java/org/springblade/modules/system/service/IUserService.java b/src/main/java/org/springblade/modules/system/service/IUserService.java
index 8ba0eae..87a24bc 100644
--- a/src/main/java/org/springblade/modules/system/service/IUserService.java
+++ b/src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -385,4 +385,13 @@
 	 * @return
 	 */
 	User getUserById(String id);
+
+	/**
+	 * 获取用户信息
+	 * @param tenantId
+	 * @param phone
+	 * @param web
+	 * @return
+	 */
+	UserInfo userInfoByWx(String tenantId, String phone, UserEnum web);
 }
diff --git a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
index 3e6f473..54bae43 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -341,6 +341,19 @@
 		return buildUserInfo(user);
 	}
 
+	/**
+	 * 获取用户信息(wx)
+	 * @param tenantId
+	 * @param phone
+	 * @param userEnum
+	 * @return
+	 */
+	@Override
+	public UserInfo userInfoByWx(String tenantId, String phone, UserEnum userEnum) {
+		User user = baseMapper.getUserByPhone(tenantId, phone);
+		return buildUserInfo(user, userEnum);
+	}
+
 	@Override
 	public UserInfo userInfo(String tenantId, String account, String password, UserEnum userEnum) {
 		User user = baseMapper.getUser(tenantId, account, password);

--
Gitblit v1.9.3