谷粒商城认证服务(三十四)
2023-09-11 14:16:49 时间
220、商城业务-认证服务-OAuth2.0简介-224、商城业务-认证服务-社交登录测试成功
之前博客也写过Oauth2的,不过没有和新浪qq等做整合,具体的也可以看https://www.cnblogs.com/dalianpai/p/12423982.html.
首先要跟着视频开通我的应用,然后看对应的API,反正也比较简单。是Oauth2的授权码模式,很完善。
具体的流程图:
下面就是简单的代码整合:
<ul>
<li>
<a href="https://api.weibo.com/oauth2/authorize?client_id=31031789&response_type=code&redirect_uri=http://auth.gulimall.com/oauth2.0/weibo/success">
<img style="width: 50px;height: 18px" src="/static/login/JD_img/weibo.png"/>
</a>
</li>
<li class="f4"> |</li>
<li>
<a href="/static/login/">
<img src="/static/login/JD_img/weixin.png"/>
<span>微信</span>
</a>
</li>
</ul>
具体的业务逻辑代码
@GetMapping("/oauth2.0/weibo/success")
public String weibo(@RequestParam("code") String code) throws Exception {
System.out.println(code);
Map<String, String> map = new HashMap<>();
map.put("client_id","31031789");
map.put("client_secret","38c9571dd37d99d7f3d6aab02a77d14d");
map.put("grant_type","authorization_code");
map.put("redirect_uri","http://auth.gulimall.com/oauth2.0/weibo/success");
map.put("code",code);
HttpResponse response = HttpUtils.doPost("https://api.weibo.com", "/oauth2/access_token", "post", new HashMap<>(), new HashMap<>(), map);
System.out.println(response);
//2.处理
if(response.getStatusLine().getStatusCode()==200){
String json = EntityUtils.toString(response.getEntity());
SocialUser socialUser = JSON.parseObject(json, SocialUser.class);
R oauthLogin = memberFeignService.oauthLogin(socialUser);
if(oauthLogin.getCode() == 0){
MemberRespVo data = oauthLogin.getData("data", new TypeReference<MemberRespVo>() {
});
System.out.println("登录成功"+data);
return "redirect:http://gulimall.com";
}else{
return "redirect:http://auth.gulimall.com/login.html";
}
}else{
return "redirect:http://auth.gulimall.com/login.html";
}
}
具体的实现:
@Override
public MemberEntity login(SocialUser socialUser) throws Exception {
String uid = socialUser.getUid();
MemberDao memberDao = this.baseMapper;
MemberEntity memberEntity = memberDao.selectOne(new QueryWrapper<MemberEntity>().eq("social_uid", uid));
if(memberEntity != null){
MemberEntity update = new MemberEntity();
update.setId(memberEntity.getId());
update.setAccessToken(socialUser.getAccess_token());
update.setExpiresIn(socialUser.getExpires_in());
memberDao.updateById(update);
memberEntity.setAccessToken(socialUser.getAccess_token());
memberEntity.setExpiresIn(socialUser.getExpires_in());
return memberEntity;
}else{
MemberEntity regist = new MemberEntity();
try {
Map<String, String> query = new HashMap<>();
query.put("access_token",socialUser.getAccess_token());
query.put("uid",uid);
HttpResponse response = HttpUtils.doGet("https://api.weibo.com", "/2/users/show.json", "get", new HashMap<String, String>(), query);
if(response.getStatusLine().getStatusCode() == 200) {
String json = EntityUtils.toString(response.getEntity());
JSONObject jsonObject = JSON.parseObject(json);
String name = jsonObject.getString("name");
String gender = jsonObject.getString("gender");
regist.setNickname(name);
regist.setGender("m".equals(gender) ? 1 : 0);
}
}catch (Exception e){
}
regist.setSocialUid(socialUser.getUid());
regist.setAccessToken(socialUser.getAccess_token());
regist.setExpiresIn(socialUser.getExpires_in());
memberDao.insert(regist);
return regist;
}
}
结果:
相关文章
- 深圳NPDP产品经理认证-新产品开发
- Oauth认证协议
- Centos7安装部署openstack--Keystone认证服务
- Keberos认证机制,KDC秘钥分发中心
- 搭建Jasig CAS中央认证服务实现单点登录——搭建Tomcat并实现SSL安全连接
- 使用OAuth打造webapi认证服务供自己的客户端使用
- .net core 认证与授权(二)
- Centos7安装部署openstack--Keystone认证服务
- 【快速简单登录认证】SpringBoot使用Sa-Token-Quick-Login插件快速登录认证
- 学习Spring Boot:(十六)使用Shiro与JWT 实现认证服务
- 微信开发 没有认证过的服务号怎么办?微信提供了測试号(开通了认证过的服务号的功能)
- C站能力认证任务关卡1-1 修改《植物大战僵尸》的存档文件,将一个新用户的进度直接修改到5-1关,金钱(能量)直接修改到10000。
- Django 认证系统 cookie & session & auth模块
- 005-shiro认证
- 无线路由器认证会话劫持漏洞
- y132.第七章 服务网格与治理-Istio从入门到精通 -- Istio认证及配置案例(十八)
- 内网渗透(二十九)之Windows协议认证和密码抓取-Windows-2012R2之后抓取密码的方式和抓取密码的防范措施
- 最安全的api接口认证
- Kubernetes_认证授权_RBAC_静态Pod网关apiserver底层的RBAC授权
- 浏览器获取CA认证流程