新增h5公众号登录功能

This commit is contained in:
hupeng committed 2025-02-20 13:08:05 +08:00
1 parent 8f7609786b
commit 1967585578
5 files changed
+112 -2

No files matched your search

@@ -135,6 +135,16 @@ public class AppAuthController {
,appWxMiniLoginVO.getOpenid()));
}
@GetMapping("/auth-wechat-login")
@Operation(summary = "社交授权的跳转")
@Parameters({
@Parameter(name = "code", description = "code码", required = true)
})
public CommonResult<AppAuthLoginRespVO> wechatAuth(@RequestParam("code") String code) {
System.out.println("code:"+code);
return CommonResult.success(authService.wechatAuth(code));
}
}
@@ -71,6 +71,14 @@ public interface MemberAuthService {
*/
AppAuthLoginRespVO weixinMiniAppLogin3(String encryptedData, String iv, String openid);
/**
* 微信公众号的一键登录
*
* @param code code
* @return 登录结果
*/
AppAuthLoginRespVO wechatAuth(String code);
/**
* 获得社交认证 URL
@@ -35,6 +35,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.annotations.VisibleForTesting;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.security.crypto.password.PasswordEncoder;
@@ -271,6 +273,46 @@ public class MemberAuthServiceImpl implements MemberAuthService {
return appAuthLoginRespVO;
}
/**
* 微信公众号登录
* @param code code
* @return
*/
@Override
public AppAuthLoginRespVO wechatAuth(String code) {
WxOAuth2AccessToken wxMpOAuth2AccessToken = null;
MemberUserDO memberUserDO = null;
try {
wxMpOAuth2AccessToken = mpService.getOAuth2Service().getAccessToken(code);
WxOAuth2UserInfo wxMpUser = mpService.getOAuth2Service().getUserInfo(wxMpOAuth2AccessToken, null);
String openid = wxMpUser.getOpenid();
//根据openid查用户是否存在
memberUserDO = userMapper.selectOne(new LambdaQueryWrapper<MemberUserDO>()
.eq(MemberUserDO::getOpenid,openid));
if (memberUserDO == null) {
// 获得获得注册用户
memberUserDO = userService.createUserIfAbsent("", getClientIP(),
LoginTypeEnum.WECHAT.getValue());
//过滤掉表情
String nickname = wxMpUser.getNickname();
memberUserDO.setOpenid(openid);
memberUserDO.setNickname(nickname);
memberUserDO.setAvatar(wxMpUser.getHeadImgUrl());
memberUserDO.setUsername(openid);
userMapper.updateById(memberUserDO);
}
}catch (WxErrorException e) {
log.error(e.getMessage());
throw exception(MINI_AUTH_LOGIN_BAD);
}
// 创建 Token 令牌,记录登录日志
AppAuthLoginRespVO appAuthLoginRespVO = createTokenAfterLoginSuccess(memberUserDO, memberUserDO.getNickname(),
LoginLogTypeEnum.LOGIN_SOCIAL);
appAuthLoginRespVO.setOpenId(memberUserDO.getOpenid());
appAuthLoginRespVO.setUserInfo(UserConvert.INSTANCE.convert3(memberUserDO));
return appAuthLoginRespVO;
}
private AppAuthLoginRespVO createTokenAfterLoginSuccess(MemberUserDO user, String mobile, LoginLogTypeEnum logType) {
// 插入登陆日志
+51 -1
View File
@@ -21,7 +21,7 @@ onShow(() => {
// 检查用户登录情况
// #ifdef H5
if(isWeixin()){
oAuth()
// H5编译的代码
// 判断是否是微信浏览器
}
@@ -55,6 +55,56 @@ const wechatMiniLogin = () => {
});
}
const getAuthUrl = (appId) => {
// #ifdef H5
// #endif
cookie.set('redirect', window.location.href)
const url = `${location.origin}/h5/#/pages/index/index`
cookie.set('index_url',url)
let redirect_uri = encodeURIComponent(url)
const state = 'STATE'
return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
}
const oAuth = async() => {
const WX_AUTH = 'wx_auth'
return new Promise((resolve, reject) => {
const accessToken = uni.getStorageSync('accessToken');
if (cookie.has('wx_auth') && accessToken && main.isLogin) {
reject()
return
}
const { code } = parseQuery()
if (!code) {
//公众号appid
const appid = APP_ID;
location.href = getAuthUrl(appid)
return
} else {
auth(code)
}
resolve()
}).catch(error => {
console.log(error)
})
}
const auth = async(code) => {
console.log('获取微信授权:',code)
let data = await wechatAuth({'code':code})
cookie.set('wx_auth', code)
if (data) {
main.SET_OPENID(data.openId)
main.SET_MEMBER(data.userInfo);
main.SET_TOKEN(data.accessToken);
}
}
</script>
+1 -1
View File
@@ -2,7 +2,7 @@ export const VUE_APP_API_URL = 'http://localhost:48081/app-api'
//export const VUE_APP_API_URL = 'https://apidc.yixiang.co/app-api'
export const VUE_APP_RESOURCES_URL = 'https://h5.yixiang.co/static'
export const VUE_APP_UPLOAD_URL = VUE_APP_API_URL + '/infra/file/upload'
export const APP_ID = 'wxc061dee8806ff712'
export const APP_ID = 'wxdbdbc123c8c30b45'
const orderListStatus = {}