guoshilong
2023-08-16 7e00eafd0a519b48b69dd209026cfe3a9cf353c2
微信登录设置标识
3 files modified
22 ■■■■■ changed files
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/endpoint/BladeTokenEndPoint.java 8 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/WxPhoneNumberTokenGranter.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java 5 ●●●●● patch | view | raw | blame | history
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);
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);
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";
}