java github 授权登录_vue.js + springboot-网站应用接入GitHub第三方登录

news/2024/5/12 20:53:22/文章来源:https://blog.csdn.net/weixin_39714763/article/details/114928884

JAVA-网站应用接入GitHub第三方登录

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

(一)准备,创建应用

(2)创建应用

73e9e4fb2316e8c6f3f66932b3545ef9.png

(3)填写信息

68c882465f983be6c41db70608449546.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处理:

先需要使用window.open打开窗口

export function openWindow(url, title, w, h){

// Fixes dual-screen position Most browsers Firefox

const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left

const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top

const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width

const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height

const left = ((width / 2) - (w / 2)) + dualScreenLeft

const top = ((height / 2) - (h / 2)) + dualScreenTop

const 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 newWindow

if (window.focus) {

newWindow.focus()

}

}

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

loginGithub () {

// 获取请求的地址 https://github.com/login/oauth/authorize?client_id=xxx

this.$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处理:

@Override

public String saveUserByGithub(String code, String state) {

log.debug("code {},state {}", code, state);

GithubOauth githubOauth = new GithubOauth();

String accessToken = githubOauth.getAccessToken(code);

Map 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 = "

\n" +

" \n" +

"" +

"

\n" +

"

登录中....

\n" +

"" +

"\n" +

" window.onload.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 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实现可以参考

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

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

相关文章

php网站适合优化_大型php网站性能和并发访问优化方案

网站性能优化对于大型网站来说非常重要&#xff0c;一个网站的访问打开速度影响着用户体验度&#xff0c;网站访问速度慢会造成高跳出率&#xff0c;小网站很好解决&#xff0c;那对于大型网站由于栏目多&#xff0c;图片和图像都比较庞大&#xff0c;那该怎么进行整体性能优化…

获取网站的ip地址

1.复制网站网址 2.winr打开cmd命令提示符 3.ping 地址 回车

字 掉落 炫酷 网站_周末觉得无聊?这些奇葩网站你需要了解一下!点击收获快乐...

国庆七天假&#xff0c;有很多朋友会在这个时候去人山人海里旅个游&#xff0c;顺便拍点照片在朋友圈晒幸(ren)福(duo)。而总有一些像你我这样的人&#xff0c;在领导同事的工作重压之下&#xff0c;已经丧失了出门「冲锋陷阵」的勇气&#xff0c;宁愿在家过上几天不洗头不化妆…

html浏览次数纪录,巧用JavaScript记录网站访问次数

巧用JavaScript记录网站访问次数2008-02-23 07:39:20来源&#xff1a;互联网 阅读 ()我们知道Cookie是记录访问你站点的用户的信息&#xff0c;它驻留在用户的硬盘上&#xff0c;如果该用户再次返回你的站点&#xff0c;则该cookie就会被一起发回到你的服务器中&#xff0c;便于…

用 API 提取、写入指定网站的 Cookie - 回复 bangrj 的问题

问题来源: http://www.cnblogs.com/del/archive/2009/02/27/1399526.html#1463307本例效果图:代码文件:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 class(TForm)Button1: TButton;But…

御泥坊搜索引擎优化网络诊断_网络营销外包——网络营销外包专员如何做好网站搜索引擎优化...

相信很多企业在规划网站建设优化时&#xff0c;都曾经了解过竞价排名&#xff0c;前期投入大换来的也仅仅是短期内的效果&#xff0c;因此&#xff0c;一些中小企业却因为高成本退而求其次&#xff0c;选择了尝试搜索引擎优化&#xff0c;那么针对网站排名提升的搜索引擎优化中…

网站如何过服务器的白名单,服务器怎么添加域名白名单

在服务器使用中经常会用到黑白名单规则&#xff0c;比如防火墙白名单、邮件白名单、服务器添加域名白名单主要和备案有关。当网站配置完成后&#xff0c;需要把域名解析到机房IP&#xff0c;而根据工信部要求&#xff0c;使用国内机房必须进行在白名单管理界面&#xff0c;可以…

令人印象深刻的使用独特javascript动画效果的网站

原文&#xff1a;queness.com 编译&#xff1a;GBin1.com 今天GBin1推荐一篇来自queness的文章&#xff0c;介绍了一些使用javascript的动画特效的网站。 Javascript技术的应用使得动画效果更加炫酷&#xff0c;最后一个绝对值得大家欣赏&#xff01; 飞翔的艺术 Rever…

宅男网上购买大家电对各大网站的总结

家里要买一些家电&#xff0c;我又正好在家闲着&#xff0c;那这个光荣的任务当然是我来做&#xff0c;但我可不愿意到国美苏宁这样的商场去逛&#xff0c;我是技术指标狂&#xff0c;到那种地方服务员还没我懂&#xff0c;关键是还价了半天还没有网上的便宜&#xff0c;费那个…

Python爬虫实战之招聘网站职位信息

目的 完成对目标招聘网站的岗位信息一级分类&#xff0c;二级分类&#xff0c;三级分类的获取. 网址 boss直聘 https://www.zhipin.com/shenzhen/?sidsem_pz_bdpc_dasou_title 58同城 https://sz.58.com/job.shtml?utm_sourcemarket&spmu-2d2yxv86y3v43nkddh1.BDPCPZ_…

如何启用https_教你启用HTTPS,让你的网站也能通过https访问

本文主要介绍 如何启用HTTPS如有需要&#xff0c;可以参考如有帮助&#xff0c;不忘 点赞 ❥一、准备工作服务器一台&#xff08;可以购买阿里云轻量应用服务器&#xff0c;比较便宜&#xff09;SSL证书 &#xff08;可以注册阿里云免费证书&#xff0c;安全性较差&#xff09;…

C#之模拟AD用户请求Sharepoint网站

最近在用Sharepoint时&#xff0c;碰到一个奇怪的问题&#xff1a;针对协作站点和文档中心&#xff08;Blog、Wiki、Meeting等不会出现这种情况&#xff09;&#xff0c;当系统账户凭据失效时&#xff0c;其他用户均无法登陆或者操作显示异常。也就是说&#xff0c;必须系统账户…

分享17个漂亮的电子商务网站(转)

对于网页设计者和开发人员来说,电子商务网站会是最具挑战性的网站之一.它需要大量的前期规划,线框图和选择一个适合的电子商务平台.当到了设计阶段,设计者必须确保产品的细节会很好的展现出来,同时,订单处理界面也要人性化.整个网站也将是公司的品牌象征.在这篇文章里,我们搜集…

网站运行情况汇报

今天早上一上班&#xff0c;怀着紧张的心情打开博客园看看前两天性能优化的效果&#xff0c;因为只能在访问高峰期才能看出来&#xff0c;尤其是早上8-9点&#xff0c;可是一看打开速度我就晕了, 连接到服务器上打开任务管理器一看&#xff0c;CPU占用几乎是一条直线&#xff0…

ue4官方网站_UE4自定义状态机资源及其编辑器

开始于2018.9.18 14:28这是我写的第一篇文章&#xff0c;略乱&#xff0c;感谢各位的谅解。Code&#xff1a;1762757171/UE4_Plugin_FSMNameDrived​github.com〇、先决及声明1.先决条件&#xff1a;1.了解UE4的C、Slate2.用过几天UE4&#xff08;蓝图、动画蓝图状态机什么的知…

wordpress acf字段 不同样式_使用 WordPress 企业主题开发企业网站经验总结

无论是国内的CMS梦想&#xff0c;PHPCMS&#xff0c;还是Dupal&#xff0c;Joomla或世界上最流行的WordPress主题的悠久历史&#xff0c;企业网站的发展都可以达到同样的效果。 WordPress企业网站的开发是WordPress企业主题的开发。公司主题和其他WordPress主题之间的主要区别是…

搜索不包含关键词_SEO必须掌握的高级搜索指令

1、双引号把搜索词放在双引号中&#xff0c;代表完全匹配搜索&#xff0c;也就是说搜索结果返回的页面包含双引号中出现的所有的词&#xff0c;连顺序也必须完全匹配。百度和Google 都支持这个指令。2、减号 减号代表搜索不包含减号后面的词的页面。使用这个指令时减号前面必须…

网站设计的标准时代

本文观点&#xff1a;遵循国际网站标准&#xff08;Web Standards&#xff09;进行网站设计和改善。 阅读对象&#xff1a;网站设计人员、web应用开发人员 关键字&#xff1a;Web Standards、XML、XHML、CSS、DOM、DOCTYPE、Accessibility 前言 网络上的变革每天都在发生&#…

php网站端口,PhpStudy修改Apache的网站端口号的方法(图)

phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新的ApachePHPMySQLphpMyAdminZendOptimizer,一次性安装&#xff0c;无须配置即可使用&#xff0c;是非常方便、好用的PHP调试环境。在Apache的网站服务器中&#xff0c;如果80端口被占用&#xff0c;则Apache服务器可能…

ftp作为网站储存服务器,nas存储怎么做ftp服务器

nas存储怎么做ftp服务器 内容精选换一换通过在服务器上部署KVM虚拟化环境&#xff0c;将硬件资源虚拟化&#xff0c;从而使一台物理服务器可以承担多台服务器的工作。KVM虚拟化平台组成如图1所示&#xff0c;其中Qemu-KVM负责硬件资源的虚拟化&#xff0c;采用虚拟计算、虚拟网…