社交登陆成功回调

1. 点击跳转至第三方授权

在这里插入图片描述

2. 这是使用gitee作为第三方授权进行验证

在这里插入图片描述

3. 授权成功则跳转至 redirect_url

在这里插入图片描述

4. 社交登陆回调逻辑

一、根据第三方授权提供的方式获取token

(1)发送请求获取code码(每次发送请求,code码会改变)

https://gitee.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code

(2)根据获取的code码拼装url,发送POST请求获取token信息

https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}

(3)获取access_token

二、判断token信息是否获取成功,获取成功代码第三方授权登陆成功,可以直接跳转至主页,获取失败则刷新登陆页

(1)获取token信息成功,则取出access_token
(2)判断是否是第一次登陆
通过判断会员数据库是否存在uid(uid需要使用access_token查询第三方授权的用户信息)
如果uid已存在数据库中则表示不是第一次登陆,则只需更新access_token即可(token每登录一次会改变,并且过期时间为1天)
如果uid不存在,则表示第一次登陆,直接进行注册,注册信息从第三方授权用户信息中获取

/*** 处理社交登陆*/
@Slf4j
@Controller
public class OAuth2Controller {@AutowiredMemberFeignService memberFeignService;//http://auth.gulimall.com/oauth2.0/gitee/success?code=b43c71db8f207af30474f8331d76789c7cf705899ef7b276b7e60bb35c83cabd@GetMapping("/oauth2.0/gitee/success")public String oauth2(@RequestParam("code") String code) throws Exception {HttpResponse post = null;try {//https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}Map<String,String> map = new HashMap<>();map.put("grant_type",Oauth2Constant.OAUTH2_GRANT_TYPE);map.put("code",code);map.put("client_id", Oauth2Constant.OAUTH2_CLIENT_ID);map.put("redirect_uri",Oauth2Constant.OAUTH2_RIDIRECT_URI);map.put("client_secret",Oauth2Constant.OAUTH2_CLIENT_SECRET);//String host, String path, String method,//Map<String, String> headers,//Map<String, String> querys,//Map<String, String> bodyspost = HttpUtils.doPost("https://gitee.com", "/oauth/token", "POST", new HashMap<>(), map, new HashMap<>());} catch (Exception e) {e.printStackTrace();}//取出token//获取状态行的响应码,如果是200就代表响应成功if (post.getStatusLine().getStatusCode() == 200){HttpEntity entity = post.getEntity();//将HttpEntity转换成String类型String entityJsonString = EntityUtils.toString(entity);//Json字符串 -> java对象  参数必须是String类型Json串SocialUser socialUser = JSON.parseObject(entityJsonString,SocialUser.class);//判断账号是否是第一次登陆,如果是第一次登陆就直接注册到会员服务R<MemberOAuthVo> r = memberFeignService.oauth2Login(socialUser);if (r.getCode() == 0){MemberOAuthVo memberOAuthVo = r.getData(new TypeReference<MemberOAuthVo>() {});log.info("用户信息:{}",memberOAuthVo);return "redirect:http://gulimall.com";}}else {//获取失败 -> 重定向到登录页return "redirect:http://auth.gulimall.com/login.html";}//第三方授权成功 -> 跳转至登陆页return "redirect:http://gulimall.com";}}

会员注册

/*** 判断账号是否是第一次登陆*/@PostMapping("/oauth2Login")public R<MemberEntity> oauth2Login(@RequestBody SocialUser socialUser) throws Exception {MemberEntity member = memberService.oauth2Login(socialUser);if(member != null){return R.ok().setData(member);}else {return R.error(BizCodeEnum.LOGINACCT_PASSWORD_INVALID_EXCEPTION.getCode(), BizCodeEnum.LOGINACCT_PASSWORD_INVALID_EXCEPTION.getMsg());}}
/*** 判断账号是否是第一次登陆* 1.查询uid(created_at) 是否存在,uid存在则表示不是第一次登陆,只需要更新access_token即可* 2.如果uid不存在,则查询第三方授权的用户信息,将用户信息、uid、access_token存入member服务* 3.返回MemberEntity*/@Overridepublic MemberEntity oauth2Login(SocialUser socialUser) throws Exception {//获取gitee授权用户的资料 https://gitee.com/api/v5/user//String host, String path, String method,//Map<String, String> headers,//Map<String, String> querMemberEntity oatuthMemberEntity = null;String giteeId = null;String giteeName = null;try {Map<String,String> map = new HashMap<>();map.put("access_token",socialUser.getAccess_token());HttpResponse response = HttpUtils.doGet("https://gitee.com", "/api/v5/user", "GET", new HashMap<>(), map);oatuthMemberEntity = new MemberEntity();giteeId = "";giteeName = "";if (response.getStatusLine().getStatusCode() == 200){HttpEntity entity = response.getEntity();String s = EntityUtils.toString(entity);JSONObject jsonObject = JSON.parseObject(s);giteeId = jsonObject.getString("id");giteeName = jsonObject.getString("name");}} catch (Exception e) {e.printStackTrace();}//判断账号是否是第一次登陆MemberEntity memberEntity = this.baseMapper.selectOne(new QueryWrapper<MemberEntity>().eq("social_uid", giteeId));if (memberEntity != null){//uid存在,表示不是第一次登陆,则更新token即可MemberEntity member = new MemberEntity();member.setId(memberEntity.getId());member.setAccessToken(socialUser.getAccess_token());member.setExpiresIn(Long.toString(socialUser.getExpires_in()));this.baseMapper.updateById(member);//返回MemberEntityreturn memberEntity;}else {//查询为空表示是第一次登陆,根据第三方提供的api查询用户信息,然后注册oatuthMemberEntity.setSocialUid(giteeId);oatuthMemberEntity.setUsername(giteeName);oatuthMemberEntity.setCreateTime(new Date());oatuthMemberEntity.setAccessToken(socialUser.getAccess_token());oatuthMemberEntity.setExpiresIn(Long.toString(socialUser.getExpires_in()));this.baseMapper.insert(oatuthMemberEntity);return oatuthMemberEntity;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/69559.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GTK之信号和回调函数

GTK之信号和回调函数 在 2.0 版&#xff0c;信号系统已从 GTK 移到 GLib&#xff0c;因此在函数和类型的说明中有前缀 “g_” 而不是 “gtk_”。   GTK 是一个事件驱动的工具包&#xff0c;意味着它会等在gtk_main() 那里&#xff0c; 直到下一个事件发生&#xff0c; 才把控…

极智AI | AIGC时代中AI巨头之间的博弈

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来谈谈 AIGC时代AI巨头之间的博弈。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 下图是开复老师在 《AI 未来》演讲中一页…

基金经理二季度AI概念股操作分化

公募基金二季度仍在加仓AI板块&#xff0c;但不同于一季度全线加仓题材各环节&#xff0c;二季度对AI产业链的操作出现分化。 资金更加聚拢在业绩率先兑现的上游算力板块。其中光模块、服务器是加仓最为显著的两个领域&#xff1b;对于部分业绩短期兑现前景不明的AI板块&#…

调研27个模型后,代码生成的知识增加了

点击上方“AI遇见机器学习”&#xff0c;选择“星标”公众号 第一时间获取价值内容 来源&#xff5c;AINLPer 卷友们好&#xff0c;对于NL2Code任务相信大家都不陌生。它主要目的就是将自然语言转换成可执行代码来提高开发人员的工作效率&#xff0c;终极目标就是干翻所有程序员…

符尧:我想为 MOSS 正名

点击上方“AI遇见机器学习”&#xff0c;选择“星标”公众号 第一时间获取价值内容 知乎: Franx链接: https://www.zhihu.com/question/596908242/answer/2996276211编辑: 深度学习自然语言处理 公众号 我是符尧&#xff0c;是先前《拆解追溯 GPT-3.5 各项能力的起源》这篇文章…

inscode评测

文章目录 项目介绍首页使用反馈语言模板编辑AI模板​编辑网站模板编辑图形模板 编辑器使用反馈使用场景1---函数定位改进建议&#xff1a; 使用场景2---项目创建改进建议&#xff1a; 使用场景3---文件上传改进建议&#xff1a; 视觉反馈模板使用一些BUG反馈创建项目会较频繁出…

谷歌20年老员工叛逃,创立第二个OpenAI?

来源&#xff1a;新智元 硅谷独角兽&#xff0c;又来震撼世界了&#xff01; 这支名叫Character Technologies的独角兽的核心力量&#xff0c;来自前谷歌LaMDA团队。 他们的新产品在移动端上线不到一周&#xff0c;下载量就达到了170万&#xff0c;直接碾压了ChatGPT&#xff0…

技术无关性别,IT 界的“她”力量也能撬动半边天!

作者 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 职业本无性别之分&#xff0c;但提到 IT 界的“程序员”&#xff0c;大家脑海中总会先浮现“格子衫、牛仔裤、戴眼镜”的模样&#xff0c;而并非人数比重较少的“程序媛”。据拉勾招聘数…

电脑同时登录多个微信

现在很多人手上都有多个手机号以及多个微信号&#xff0c;但我们发现&#xff0c;当我们想在电脑上同时登录多个微信&#xff0c;好像每次双击打开&#xff0c;都是跳出当前这一个&#xff0c;和QQ有很大的区别。 那我们可以通过bat文件来试试&#xff0c;通过执行bat文件里的…

电脑上同时登陆多个微信

电脑版微信默认只能登录一个微信&#xff0c;其实这里有个小技巧&#xff0c;无需安装任何软件&#xff0c;就能实现微信多开。 第一种方法&#xff1a; 按住键盘上的Shift键不要松手&#xff0c;然后鼠标快速多次点击微信图标&#xff0c;即可实现多开。&#xff08;这种方法…

电脑,从多人一台到一人多台

最早接触电脑是中学时&#xff0c;当时应该是APPLE-Ⅱ&#xff0c;固化的Basic&#xff0c;仅仅算是打了个照面&#xff0c;印象最深的就是空调机房&#xff0c;还有地毯&#xff0c;拖鞋&#xff08;当时还没有鞋套&#xff09;&#xff0c;功能倒是没有太多的概念。 到了大学…

19、两台电脑怎么就能互相通信了

今天的内容非常有趣,绝对让你涨知识~ 不知道大家是否好奇过这样一个问题,那就是,两台电脑怎么就能互相传递信息了呢?可能你觉得这是一件很正常的事情,就那样一发一接不就ok了嘛?可是真的让你说出个所以然,那绝对是触碰到你的知识盲区了~ 也许你学过之前的内容知道,这需…

多用户使用一台计算机 可设置,如何设置才能让一台计算机可以多个用户同时登陆?...

满意答案 adnx88234 2013.02.26 采纳率&#xff1a;55% 等级&#xff1a;13 已帮助&#xff1a;13511人 第一&#xff1a;共享的前提工作&#xff1a; 1.更改不同的计算机名&#xff0c;设置相同的工作组&#xff01; 2.我的电脑右键&#xff0d;管理&#xff0d;计算机管理…

chatgpt赋能python:Python数学建模:将数据转化为答案的利器

Python数学建模&#xff1a;将数据转化为答案的利器 随着数据时代的到来&#xff0c;数据的价值越来越受到人们的关注。但是单纯的数据没有意义&#xff0c;只有将他们转化成有意义的答案才有意义。在这个过程中&#xff0c;数学建模是一个非常重要的工具&#xff0c;而Python…

开发者藏经阁——超全阿里系电子书大合集(打包下载)

小白寻思着给大家发点福利&#xff0c;就整理了一下&#xff0c;阿里系电子书&#xff0c;有近80本&#xff0c;分享给大家&#xff0c;均可免费下载。 覆盖 Java、物联网、云原生、前端、大数据、开源、AI 等技术领域&#xff0c;深度分享阿里工程师实践精华&#xff0c;顶级…

阿里副总裁玄难:藏经阁计划研发大规模知识构建技术首次披露

导读&#xff1a;2018年4月&#xff0c;阿里联合清华大学、浙江大学、中科院自动化所、中科院软件所、苏州大学等五家机构&#xff0c;联合发布藏经阁&#xff08;知识引擎&#xff09;研究计划&#xff0c;同时还宣布打算用一年时间初步建成首个开放的知识引擎服务平台&#x…

互联网券商行业公司

中国券商在向互联网金融方向的拓展呈现了百花齐放的特点。对各个券商来说&#xff0c;在互联网证券业务方面在一定程度上尚缺乏或未来需要比较明确的长远目标。或者说&#xff0c;目前大家还都在摸着石头过河。但是&#xff0c;在中国大市场和互联网经济推动下&#xff0c;前途…

1元体验京东云服务器

1元体验京东云服务器 在大神鸿洋和郭霖的微信公众号推送文章发现了这个好消息&#xff0c;第一时间注册了账号&#xff0c;申请下了订单&#xff0c;毕竟数量有限。尽管两位大神讲的很详细&#xff0c;无奈没有接错过CentOS、Ubuntu、WindowsServer这些服务器系统的小白&#…

java简单代码运行内存图

java中主要的三块内存空间&#xff1a; 1.栈内存&#xff08;stack&#xff09;&#xff1a;在方法别调用时&#xff0c;栈内存会给方法分配内存&#xff08;压栈&#xff09;&#xff0c;主 要存储的是局部变量。方法调用结束后&#xff0c;该方法所占用的内存释放&#xff…

大厂程序员能力修炼手册,从筑基到化神要多久?

刚入行&#xff1a; 就是干 入行两年&#xff1a;熟知各种设计模式&#xff0c;信手拈来 入行三年&#xff1a;阅码无数&#xff0c;心中已无设计模式 入行五年&#xff1a;就是干 大家好&#xff0c;我是安酱。今天来跟大家聊聊程序员的能力进阶道路。 相信许多小伙伴都知道…