使用Gitee进行社交登录的流程

使用Gitee进行社交登录

创建Gitee第三方应用流程:

鼠标移动到个人头像上,点击账号设置

点击账号设置,选择左边目录下数据管理的第三方应用

然后选择创建应用

根据要求填写

填写好了上面的要求之后,点击创建应用,这样,在Git上就创建了一个第三方应用,我为谷粒商城创建的第三方应用的信息如下。

 

OpenAPI文档说明

可以在账号设置页面,点击底部的OpenApi查看如何获取Gitee中的信息

比如在API文档中的用户账号下可以根据Accsess_Token获取授权的用户信息

在OAuth文档下提供了 OAuth2.0获取AccessToken的步骤。

谷粒商城实现社交登录流程

1.在前端页面设置一个超链接 ,前端页面的地址要和我们创建的第三方应用中的应用主页要相同。

应用主页:

超链接地址为OAuth2.0文档中的 A

<a href="https://gitee.com/oauth/authorizeclient_id=273de618c9ab38dff104e85d32324311a973a48b333566958c88481edd0bb5e3&redirect_uri=http://auth.gulimall.com/auth2.0/gitee/success&response_type=code">
<img style="width: 50px;height: 18px;" src="https://gitee.com/static/images/logo-black.svg?t=158106664" />
<span>Gitee</span>
</a>

注意:这里的 authorizeclient_idredirect_uri 要跟我们创建的第三方应用中的 Client ID ,应用回调地址 相同。

2.在前端点击超链接后,Gitee会返回给应用回调地址所在的请求一个code,然后我们在后端根据这个code 使用OAuth中的 D 获得 AccessToken。

	@GetMapping("/auth2.0/gitee/success")public String auth2Login(@RequestParam("code") String code, HttpSession session) throws Exception {//根据自己的信息设置valueMap<String, String> map = new HashMap<>();map.put("grant_type","authorization_code");map.put("code",code);map.put("client_id","273de618c9ab38dff104e85d32324311a973a48b333566958c88481edd0bb5e3");map.put("redirect_uri","http://auth.gulimall.com/auth2.0/gitee/success");map.put("client_secret","8b1f1707d35936bcb78479f7596fe7e3ab097ebd615ca57e71c6728d64b5ed6b");//发送请求,得到数据,HttpUtils是我自己的一个工具类,用来发送get、post请求的HttpResponse response = HttpUtils.doPost("https://gitee.com", "/oauth/token", "post", new HashMap<>(), map, new HashMap<>());//得到access_tokenif(response.getStatusLine().getStatusCode()==200){//EntityUtils是org.apache.http.util下的一个工具类String s = EntityUtils.toString(response.getEntity());SocialUser socialUser = JSON.parseObject(s, SocialUser.class);//判断这个用户是否是第一次使用当前社交登录R r = memberFeignService.socialLogin(socialUser);if(r.getCode()==0){//登录成功MemberEntityVo data = r.getData("data", new TypeReference<MemberEntityVo>() {});session.setAttribute(AuthServerConstant.LOGIN_USER,data);
//                log.info("登录成功:用户信息:{}",data.toString());return "redirect:http://gulimall.com";}else{//登录失败return "redirect:http://auth.gulimall.com/login.html";}}else{return "redirect:http://auth.gulimall.com/login.html";}}

3.在 memberFeignService 对应的微服务中使用API文档中的获取用户资料方法,根据AccessToken得到用户的信息。

@PostMapping("/socialLogin")public R socialLogin(@RequestBody memberSocialUser user) throws Exception {MemberEntity memberEntity = memberService.socialLogin(user);return R.ok().put("data",memberEntity);}

 

@Overridepublic MemberEntity socialLogin(memberSocialUser vo) throws Exception {String name="";Map<String,String> map=new HashMap<>();map.put("access_token", vo.getAccess_token());HttpResponse response = HttpUtils.doGet("https://gitee.com", "/api/v5/user", "get", new HashMap<String, String>(), map);if(response.getStatusLine().getStatusCode()==200){String s = EntityUtils.toString(response.getEntity());JSONObject jsonObject = JSON.parseObject(s);int id = (int)jsonObject.get("id");name = (String)jsonObject.get("name");vo.setUid(id+"");}LambdaQueryWrapper<MemberEntity> lqw = new LambdaQueryWrapper<>();lqw.eq(MemberEntity::getSocialUid,vo.getUid());MemberEntity entity = this.getOne(lqw);if(entity!=null){//这个用户已经注册//Access_token存在过期时间,所以每一次登录需要更新Access_tokenMemberEntity update = new MemberEntity();update.setId(entity.getId());update.setAccessToken(vo.getAccess_token());update.setExpiresIn(vo.getExpires_in()+"");baseMapper.updateById(update);entity.setExpiresIn(vo.getExpires_in()+"");entity.setAccessToken(vo.getAccess_token());return entity;}else{//没有就注册MemberEntity memberEntity = new MemberEntity();memberEntity.setAccessToken(vo.getAccess_token());memberEntity.setExpiresIn(vo.getExpires_in()+"");memberEntity.setSocialUid(vo.getUid());memberEntity.setNickname(name);baseMapper.insert(memberEntity);return memberEntity;}}

然后根据用户的UID去数据库中查询,判断用户是否是第一次登录,如果是第一次登录,那么就把用户的数据保存到数据库中。

在登录成功后,将用户的数据返回给调用的微服务。

4.然后就在用户登录微服务中得到登录成功的用户信息,这样社交登录就完成了。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

多项式和Bezier曲线拟合

目录 1. 多项式拟合2. Bezier曲线拟合3. 源码地址 1. 多项式拟合 在曲线拟合中&#xff0c;多项式拟合方法的性能受到三个主要因素的影响&#xff1a;采样点个数、多项式阶数和正则项。 采样点个数 N N N&#xff1a;从Figure 1中可以看出较少的采样点个数可能导致过拟合&…

【Linux】解决ubuntu20.04版本插入无线网卡没有wifi显示【无线网卡Realtek 8811cu】

ubuntu为Realtek 8811cu安装驱动&#xff0c;解决wifi连接问题 1、确认无线网卡的型号-Realtek 8810cu2、下载并配置驱动 一句话总结&#xff1a;先确定网卡的型号&#xff0c;然后根据网卡的型号区寻找对应的驱动下载&#xff0c;下载完成之后在ubuntu系统中进行编译&#xff…

RBA认证是什么?RBA认证的流程是怎么样的

RBA认证&#xff0c;即“责任商业联盟”认证&#xff0c;英文全称是Responsible Business Alliance。这是一个为电子行业或以电子为主要组成部分的行业及其供应链制定的社会责任审核标准。该标准旨在确保工作环境的安全、工人受到尊重并富有尊严、商业营运合乎环保性质并遵守道…

python 对图片进行操作

Pillow是一个强大的图像处理库&#xff0c;它提供了许多用于打开、操作和保存图像的功能。 Image模块&#xff1a; Image模块提供了用于打开、创建、编辑和保存图像的基本功能。可以使用Image.open()函数来打开图像文件&#xff0c;或者使用Image.new()函数来创建新的图像,还可…

用Python将原始边列表转换为邻接矩阵

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在图论和网络分析中&#xff0c;图是一种非常重要的数据结构&#xff0c;它由节点&#xff…

MATLAB中normxcorr2函数的用法(模板匹配和对象识别)

normxcorr2 是 MATLAB 中的一个函数&#xff0c;用于计算两个矩阵的归一化互相关。这个函数在图像处理和计算机视觉中特别有用&#xff0c;尤其是在模板匹配和对象识别方面。 函数签名 在 MATLAB 中&#xff0c;normxcorr2 函数的基本调用形式如下&#xff1a; C normxcorr…

虚拟现实(VR)的应用场景

虚拟现实&#xff08;VR&#xff09;技术创建和体验三维虚拟世界的计算机仿真技术。用户通过佩戴VR头显等设备&#xff0c;可以完全沉浸在虚拟世界中&#xff0c;并与虚拟世界中的物体进行交互。VR技术具有广泛的应用前景&#xff0c;可以应用于各行各业。以下是一些VR的应用场…

海康智能相机FTP本地存图流程

背景&#xff1a;近期一个新项目需要使用到智能相机&#xff0c;借助智能相机算法直接输出检测结果并将相机图像进行本地化保存和展示。由于申购目标智能相机未到&#xff0c;暂时使用测试智能相机。 目标智能相机型号&#xff1a;海康智能相机MV-SC3050XC 当前测试相机型号…

【Applied Algebra】隐藏子群问题和Shor算法的新视角

隐藏子群问题和Shor算法的新视角 隐藏子群问题是指给定一个群和一个函数,该函数对于群的一个子群是常数,并且对于子群的任何两个不同的左陪集有不同的值,问题是找到这个子群.HSP是许多量子算法的基础,其中最著名的是Shor的算法,它可以用来分解大整数和计算离散对数,这直接威胁到…

【sping】在logback-spring.xml 获取项目名称

在日志文件中我们想根据spring.application.name 创建出的文件夹。 也不想死在XML文件中。 application.yml spring:application:name: my-demo logback-spring.xml <springProperty name"application_name" scope"context" source"spring.app…

【Redis】Zset 数据类型

文章目录 常用命令zaddzcard & zcountzrange & zrevrangezpopmax & bzpopmaxzpopmin & bzpopminzrank & zrevrankzscore & zremzremrangebyrank & zremrangebyscorezincrby 多个集合间的交互命令交集 & zinterstore并集 & sunionstore 内部…

淘宝客链接转换接口阿里妈妈佣金转换:功能、使用与优缺点详解

淘宝客链接转换接口详解 随着互联网的发展&#xff0c;电子商务行业日益繁荣&#xff0c;淘宝作为国内最大的电商平台之一&#xff0c;其链接转换接口也受到了广泛关注。淘宝客链接转换接口是一种将淘宝商品链接转换成特定形式的短链接或推广链接的工具&#xff0c;方便用户进…

模版初阶【C++】

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

AI人工智能培训老师叶梓:大数据治理的关键工具:开源数据血缘分析系统

在大数据时代&#xff0c;数据的产生和传播速度日益加快&#xff0c;数据之间的关系也变得日益复杂。为了更好地管理和理解数据之间的关系&#xff0c;数据血缘分析系统应运而生。本文将介绍几个开源的数据血缘分析系统&#xff0c;它们在数据治理、数据质量管理和数据隐私保护…

Apache Answer 开源问答社区安装体验

Answer 是由 SegmentFault 思否团队打造的一款问答平台软件,后端使用 Go 语言编写,于2022年10月24日(程序员节)正式开源。你可以免费使用 Answer 高效地搭建一个问答社区,并用于产品技术问答、客户支持、用户交流等场景。 2023年10月9日,Answer 顺利通过投票,以全票通过…

自己写的爬虫小案例

网址&#xff1a;aHR0cDovL2pzc2NqZ3B0Lmp4d3JkLmdvdi5jbi8/dXJsPS92aWV3L3dvcmtpbmdVbml0L3dvcmtpbmdVbml0Lmh0bWw 这串代码能够爬取勘察单位企业的详细信息。 import requests import time import csv f open(勘察单位公司信息.csv,w,encodingutf-8,newline) csv_writer …

详解QString与QByteArray使用对比

QString与QByteArray是Qt库中两种不同的字符串/字节序列容器&#xff0c;各自服务于特定的应用场景。本篇文章将详细解析它们的异同&#xff0c;帮助您在实际编程中准确选择和有效地使用这两种类型。 参考 QString类的使用 相同之处 构造与初始化&#xff1a; 两者都支持直接使…

2024深圳杯东三省A题全保姆教程 多个火箭残骸的准确定位

A题 多个火箭残骸的准确定位 问题1 &#xff1a;建立数学模型&#xff0c;分析如果要精准确定空中单个残骸发生音爆时的位置坐标&#xff08;经度、纬度、高程&#xff09;和时间&#xff0c;至少需要布置几台监测设备&#xff1f;假设某火箭一级残骸分离后&#xff0c;在落点附…

面试算法题之暴力求解

这里写目录标题 1 回溯1.1 思路及模板1.1 plus 排列组合子集问题1.2 例题1.2.1 全排列1.2.2 N 皇后1.2.3 N皇后问题 II1.2.4 子集 &#xff08;子集/排列问题&#xff09;1.2.4 组合(组合/子集问题)1.2.5 全排列 &#xff08;排列问题&#xff09;1.2.1做过1.2.6 子集II &#…