mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 08:13:44 +08:00 
			
		
		
		
	update 使用justauth扩展功能支持微信小程序登录
This commit is contained in:
		@@ -5,9 +5,17 @@ import cn.dev33.satoken.stp.StpUtil;
 | 
			
		||||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import me.zhyd.oauth.config.AuthConfig;
 | 
			
		||||
import me.zhyd.oauth.model.AuthCallback;
 | 
			
		||||
import me.zhyd.oauth.model.AuthResponse;
 | 
			
		||||
import me.zhyd.oauth.model.AuthToken;
 | 
			
		||||
import me.zhyd.oauth.model.AuthUser;
 | 
			
		||||
import me.zhyd.oauth.request.AuthRequest;
 | 
			
		||||
import me.zhyd.oauth.request.AuthWechatMiniProgramRequest;
 | 
			
		||||
import org.dromara.common.core.constant.SystemConstants;
 | 
			
		||||
import org.dromara.common.core.domain.model.XcxLoginBody;
 | 
			
		||||
import org.dromara.common.core.domain.model.XcxLoginUser;
 | 
			
		||||
import org.dromara.common.core.exception.ServiceException;
 | 
			
		||||
import org.dromara.common.core.utils.ValidatorUtils;
 | 
			
		||||
import org.dromara.common.json.utils.JsonUtils;
 | 
			
		||||
import org.dromara.common.satoken.utils.LoginHelper;
 | 
			
		||||
@@ -39,12 +47,24 @@ public class XcxAuthStrategy implements IAuthStrategy {
 | 
			
		||||
        // 多个小程序识别使用
 | 
			
		||||
        String appid = loginBody.getAppid();
 | 
			
		||||
 | 
			
		||||
        // todo 以下自行实现
 | 
			
		||||
        // 校验 appid + appsrcret + xcxCode 调用登录凭证校验接口 获取 session_key 与 openid
 | 
			
		||||
        String openid = "";
 | 
			
		||||
        AuthRequest authRequest = new AuthWechatMiniProgramRequest(AuthConfig.builder()
 | 
			
		||||
            .clientId(appid).clientSecret("自行填写密钥 可根据不同appid填入不同密钥")
 | 
			
		||||
            .ignoreCheckRedirectUri(true).ignoreCheckState(true).build());
 | 
			
		||||
        AuthCallback authCallback = new AuthCallback();
 | 
			
		||||
        authCallback.setCode(xcxCode);
 | 
			
		||||
        AuthResponse<AuthUser> resp = authRequest.login(authCallback);
 | 
			
		||||
        String openid, unionId;
 | 
			
		||||
        if (resp.ok()) {
 | 
			
		||||
            AuthToken token = resp.getData().getToken();
 | 
			
		||||
            openid = token.getOpenId();
 | 
			
		||||
            // 微信小程序只有关联到微信开放平台下之后才能获取到 unionId,因此unionId不一定能返回。
 | 
			
		||||
            unionId = token.getUnionId();
 | 
			
		||||
        } else {
 | 
			
		||||
            throw new ServiceException(resp.getMsg());
 | 
			
		||||
        }
 | 
			
		||||
        // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
 | 
			
		||||
        SysUserVo user = loadUserByOpenid(openid);
 | 
			
		||||
 | 
			
		||||
        // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
 | 
			
		||||
        XcxLoginUser loginUser = new XcxLoginUser();
 | 
			
		||||
        loginUser.setTenantId(user.getTenantId());
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user