vue.js + springboot-网站应用接入GitHub第三方登录

news/2024/5/17 23:28:56/文章来源:https://blog.csdn.net/qq_43599835/article/details/102371555

转载 https://www.byteblogs.com/article/162

JAVA-网站应用接入GitHub第三方登录
相对 网站应用接入 QQ 登录,简单很多,Github 直接创建应用就可以用,不需要长时间的审核

GitHub 开发者官方文档:https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/

(一)准备,创建应用

(1)开打开发者(不需要审核)
访问:https://github.com/settings/profile
image.png

(2)创建应用
image.png

(3)填写信息
image.png

(三)后台处理流程
(1)前端请求登录,无参数
(2)后端重定向到

地址:https://github.com/login/oauth/authorize
参数:client_id=(AppID)
redirect_uri=(回调地址)
state=(原样返回)

返回时

code=(授权码)
state=(原样返回)

(3) 返回回调地址,通过 Authorization Code 获取 AccessToken

请求地址:https://github.com/login/oauth/access_token
参数:client_id=(AppId)
client_secret=(密钥)
code=(回调地址携带的 code)
redirect_uri=(回调地址,和上面回调地址一样)

返回时

access_token=(访问授权码)
token_type=bearer(固定)

(4)通过 access_token 获取用户信息

请求地址:https://api.github.com/user
参数:access_token(返回的访问授权码)

前端vue处理:

  1. 先需要使用window.open打开窗口
export function openWindow(url, title, w, h) {// Fixes dual-screen position                            Most browsers       Firefoxconst dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.leftconst dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.topconst width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.widthconst height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.heightconst left = ((width / 2) - (w / 2)) + dualScreenLeftconst top = ((height / 2) - (h / 2)) + dualScreenTopconst newWindow = window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left)// Puts focus on the newWindowif (window.focus) {newWindow.focus()}
}

然后拿到后面返回的数据,去请求登录

    loginGithub () {// 获取请求的地址  https://github.com/login/oauth/authorize?client_id=xxxthis.$store.dispatch("xxx").then(res => {openWindow(res.model.authorizeUrl,"github",540,540)window.addEventListener('message', this.loginGithubHandler, false);})},loginGithubHandler(e) {let { socialId } = e.data;if (socialId) {this.$store.dispatch("xxxx", e.data).then(res =>{window.removeEventListener('message',this.loginGithubHandler,false)})}}

后端java处理:

 @Overridepublic String saveUserByGithub(String code, String state) {log.debug("code {},state {}", code, state);GithubOauth githubOauth = new GithubOauth();String accessToken = githubOauth.getAccessToken(code);Map<String, Object> objectObjectMap = JsonUtil.parseHashMap(accessToken);String userInfo = githubOauth.getUserInfo((String) objectObjectMap.get("access_token"));GithubVO githubVO = JsonUtil.parseObject(userInfo, GithubVO.class);// 初始化用户if (usersOpenOauth == null) {......}result.put("socialId", githubVO.getId());// vue前端获取这个数据,去登录。String html = "<head>\n" +"  <meta charset=\"UTF-8\">\n" +"</head>" +"<body>\n" +"   <p style=\"text-align: center;\"><h3>登录中....</h3></p>\n" +"</body>" +"\n" +"  window. function () {\n" +"    var message =" + JsonUtil.toJsonString(result) + ";\n" +"    window.opener.parent.postMessage(message, '*');\n" +"    parent.window.close();\n" +"  }\n" +"\n";return html;}
  private static final String AUTH_URL = "https://github.com/login/oauth/authorize";private static final String TOKEN_URL = "https://github.com/login/oauth/access_token";private static final String USER_INFO_URL = "https://api.github.com/user";public String getAccessToken(String code) {Map<String, Object> params = new HashMap<>();params.put("code", code);params.put("client_id", getClientId());params.put("client_secret", getClientSecret());HttpRequest post = HttpRequest.post(TOKEN_URL);post.body(JsonUtil.toJsonString(params)).contentType("application/json").header(Header.ACCEPT, "application/json");String result = post.execute().body();log.debug("github -> getAccessToken -> result -> {}", result);return result;}

这样基本就可以了。

vue实现可以参考

https://github.com/byteblogs168/theme-default/blob/1.x/src/components/Login.vue

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

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

相关文章

网站数据分析

网站数据分析 数据的标准化&#xff08;normalization&#xff09;是将数据按比例缩放&#xff0c;使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到&#xff0c;去除数据的单位限制&#xff0c;将其转化为无量纲的纯数值&#xff0c;便于不同单位或量级的指…

Google Analytics中的基本度量四 “页面停留时间和网站停留时间

Google Analytics中的基本度量四 “页面停留时间和网站停留时间” “页面停留时间和网站停留时间”是Google Analytics中的一对时间度量。用来分别记录用户在网站或网页上的停留时间。这样我们就可以根据用户停留的时间长短来衡量网站或页面的表现。但这两个度量真的准确吗&am…

如何搭建和发布自己的网站

大体分以下五个步骤 1、域名申请 2、虚拟主机申请 3、域名解析与域名绑定 4、网站备案 5、搭建网页 6、网页上传到服务器 下面分别讲解各个步骤 1、域名申请 有很多网站可以申请域名&#xff0c;我用的是阿里云万网https://wanwang.aliyun.com/?spm5176.8142029.73571…

SEO优化篇-NGINX强制使用https访问(http跳转到https)

hi&#xff0c;大家好&#xff0c;我是终南有客&#xff0c;一个热爱自由的程序员…… 想要获取更多信息&#xff0c;请关注&#xff08;终南有客&#xff09;公众号&#xff0c;了解最新消息 新站SEO的朋友注意了,经本人测试,使用404强制跳转会导致页面无收录,因为爬虫不会跳转…

如何查看一个网站的robots文件?

1.首先打开网站的首页&#xff0c;比如&#xff1a;https://www.jd.com/ 2.在域名后&#xff0c;输入robots.txt https://www.jd.com/robots.txt

如何查看一个网站的HTML地图和XML地图?

方法1&#xff1a;直接在首页域名后&#xff0c;输入sitemap,可以查看HTML地图&#xff0c;举例&#xff1a;首页地址http://www.hnfxfl.com/&#xff0c;输入http://www.hnfxfl.com/sitemap 即可。 首页域名后&#xff0c;输入sitemap.xml&#xff0c;可以查看XML地图&#x…

超好用的在线PDF转Word网站,真后悔没早发现

把PDF转成Word还是经常干的事情。 然而&#xff0c;下载一大堆软件来干这件简单的事情还是显得过于繁琐和复杂。 何况很多网上的软件安装常常出问题&#xff0c;在度娘里面搜索&#xff0c;然后下载又会经常遇到钓鱼网站&#xff0c;电脑“中毒”是常事。 有没有简单的方法&…

【公告】PDF365网站重磅上线客户端啦,快来下载体验吧

为了给小伙伴们带来最好的体验&#xff0c;经过程序员GG们的无数个日夜奋战&#xff0c;PDF365网站终于推出了“PDF365”客户端。 相信细心的小伙伴们已经发现&#xff0c;PDF365网站右上角的客户端下载已经由原来的福昕PDF转Word转换器下载&#xff0c;更新成为PDF365客户端下…

如何将PDF转换成PPT,用这个网站就可以了

日常办公中经常遇到需要将PDF转换成PPT的需求&#xff0c;今天就教大家如何快速将PDF转换成PPT&#xff0c;只要3步哦&#xff0c;别磨蹭赶紧学起来&#xff0c;超级简单&#xff0c;仅需一个PDF在线转换网站即可搞定&#xff0c;一起来看看吧。 1、首先打开PDF在线转换平台-- …

在线网站、PC端、移动端,PDF转换器最全合集了解一下?

天天跟各种文档打交道的上班族们&#xff0c;对PDF转换这个操作一定是深恶痛绝&#xff1b;什么PDF转Word、PDF转PPT、PDF转Excel&#xff1b;还有Word转PDF、PPT转PDF.......眼花缭乱&#xff0c;看着就头痛。 有的小伙伴会吐槽自己也就偶尔进行一下PDF转换的操作&#xff0c;…

在Scrapy项目【内外】使用scrapy shell命令抓取 某网站首页的初步情况

Windows 10家庭中文版&#xff0c;Python 3.6.3&#xff0c;Scrapy 1.5.0&#xff0c; 时隔一月&#xff0c;再次玩Scrapy项目&#xff0c;希望这次可以玩的更进一步。 本文展示使用在 Scrapy项目内、项目外scrapy shell命令抓取知乎首页的初步情况&#xff0c;重要的一点是&am…

ASP.NET 网站路径

ASP.NET ASP.NET 网站路径 使用网站中的资源时&#xff0c;通常必须指定资源的路径。例如&#xff0c;您可以使用 URL 路径引用页面中的图像文件或网站中其他位置处的页面的 URL。同样&#xff0c;Web 应用程序中的代码可以使用基于服务器的文件的物理文件路径对文件进行读写操…

Python+bs4+xlspdf+mail,获取网站数据转化成要素格式的pdf并发送邮件。

Pythonbs4xlspdfmail&#xff0c;获取网站数据转化成要素格式的pdf并发送邮件。

Web2.0网站性能调优实践

当前web2.0革命风起云涌&#xff0c;web2.0强调服务&#xff0c;而服务最基本的要求是速度快和稳定&#xff0c;离开这两个谈功能强大和易用性都没有任何意义。本文介绍一些关于笔者运营一个web2.0网站的优化心得和经验&#xff0c;希望能够和大家共同探讨。 Web2.0网站不…

Java专业人士必备的书籍和网站列表

Roy Miller (royroywmiller.com), 创始人兼总裁, The Other Road, LLC 对于 Java™ 语言开发人员来说&#xff0c;信息过量是一个真正的问题。每个新入行的程序员都要面临一个令人畏缩的挑战&#xff1a;要进入的行业是一个具有海量知识的行业。要了解的东西简直太多了。对于有…

大型网站技术架构

架构演变第一步&#xff1a;物理分离webserver和数据库 最开始&#xff0c;由于某些想法&#xff0c;于是在互联网上搭建了一个网站&#xff0c;这个时候甚至有可能主机都是租借的&#xff0c;但由于这篇文章我们只关注架构的演变历程&#xff0c;因此就假设这个时候已经是托管…

用Varnish和Memcached缓存给WordPress网站提速-内存级加速

Varnish是一款高性能的缓存加速器&#xff0c;Varnish把数据存放在服务器的内存中&#xff0c;利用内存可以极大的提高PHP页面执行速度&#xff0c;可以设置0&#xff5e;60秒的精确缓存时间&#xff0c;32位的机器支持的缓存文件最大为2 GB。 Varnish采用VCL的配置&#xff0…

正则表达式的符号概念、捕获组与非捕获组、解读方式、练习网站

正则表达式 正则表达式的解读方法符号概念练习的网站看两个现象进行后续思考Group的用途 捕获组和非捕获组捕获组非捕获组组的命名 正则表达式的解读方法 读者最好能养成按照字符来理解正则表达式的习惯。&#xff08;参考自动物书《精通正则表达式》&#xff0c;这种读法对我…

基于VUE使用Hbuilder工具开发的甜品网站

上文已经提到了VUE实现的思维导图&#xff0c;感兴趣的同学可以自己去了解一下VUE&#xff0c;学过JS都会很快上手。本文是开发的甜品网站&#xff0c;适配所有手机的H5网页&#xff0c;你说它是APP、小程序好像都没错。 实现代码界面如下&#xff1a; 实现的主要代码如下&…

IE浏览器高通网站打不开dump分析选择目录总结

首先需要安装jdk与jre最新版本 安装之后配置好路径&#xff0c;重启电脑 如果浏览器提示&#xff1a;Unable to load Java Applet. Please make sure JRE is updated. 就如下图进行操作&#xff1a; 在浏览器设置->安全->去掉ActiveX筛选的前面的√ 当死机之后&#x…