sau交流学习社区第三方登陆github--oauth来实现用户登录

最近在丰富nodejsBlog开发的“交流学习社区”(https://www.mwcxs.top)的其他功能以及修复一些bug。

有时候觉得注册会让用户觉得很麻烦,如果提供第三方登陆,用户会选择他经常使用的平台进行登陆,这样可以省去很多繁琐的步骤,开发人员基本都会有Github账号。

在考虑使用第三方登录,就研究了下使用github的oauth来时间用户登录。实现起来还是很简单的,下面简单介绍一下:

一、OAuth 2.0原理

为啥要说下这个oauth 2.0的原理?因为这个是第三方登陆必须要理解的地方。

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 ---- 百度百科

(一)该协议和授权认证中涉及三个部分:

1、服务端提供方,例如github,QQ等,github上存储了用户的登录名,email,昵称,头像等信息

2、用户

3、客户端,例如交流学习社区就是一个客户端,需要服务端向我提供一些基本信息

(二)认证授权过程

1、交流学习社区需要通过github获取用户的基本信息

2、跳转到github的授权页面,用户同意交流学习社区获取它的基本信息

3、交流学习社区获取github提供的授权码(验证码),使用授权码向github申请一个令牌

4、github对交流学习社区提供的授权码进行验证,验证没有问题后,给一个令牌到交流学习社区端

5、交流学习社区使用令牌,向github获取用户信息

6、github确认令牌没有问题,返回交流学习社区一些用户的基本信息

二、在github申请OAuth App

在设置-->开发者设置-->授权应用里,新建一个应用

按照要求填写应用的一些东西

Application Name:应用名称(重要)

HomePageURL:网站的URL

ApplicationDescription:网站描述

Authorization callback URL:回调地址 (重要)

三、开始填写这些内容

以sau交流学习社区(https://www.mwcxs.top)的授权登陆作为例子,使用的是基于thinkjs开发的nodejs全栈应用。

1、访问用户登录的验证接口

https://github.com/login/oauth/authorize?client_id=xxxxxxxxxxxxxxxxxx&scope=user,public_repo

2、访问上面接口后,github会让跳转到你预定的url(就是授权的回调地址(Authorization callback URL))

http://localhost:8080/callback?code=****************

3、开发者可以通过code,client_id以及client_secret这三个参数获取用户的access_token即用户身份标识,请求如下

https://github.com/login/oauth/access_token?client_id=xxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxx&code=xxxxxxxxxxxxxxxxxxx

这样就会返回access_token

4、这样我们就可以用这个access_token来获取用户的信息

https://api.github.com/user?access_token=xxxxxxxxxxxxxxxxx xxxxxxxx

四、总结

回调地址就是说,当用户点击授权后,需要调用的接口。

注:thinkjs默认使用model/contoller/action方法的路由定义方式


注意:部署上线后github上需要都改成线上地址

sau交流学习社区第三方登陆github--oauth来实现用户登录的更多相关文章

  1. sau交流学习社区--songEagle开发系列:Vue.js + Koa.js项目中使用JWT认证

    一.前言 JWT(JSON Web Token),是为了在网络环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519). JWT不是一个新鲜的东西,网上相关的介绍已经非常多了.不是很了解的 ...

  2. sau交流学习社区—vue总结:使用vue的computed属性实现监控变量变化,使用vue的watch属性监控变量变化从而实现其他业务

    有时候遇到这么个需求,输入框为空的时候,请求一遍接口,如果输入框不为空的时候,需要点击搜索按钮请求接口. 同步sau交流学习社区:https://www.mwcxs.top/page/464.html ...

  3. sau交流学习社区--看小说的lovebook一个无线端BS应用

    一.前言 loveBook爱上阅读,是一款webapp的读小说等书籍的并且阅读的应用.如果觉得可以,欢迎fork和star. 自己最近在追斗破苍穹电视剧,下班时候在地铁上总听到有人说,斗破苍穹书籍比电 ...

  4. sau交流学习社区--在element-ui中新建FormData对象组合上传图片和文件的文件对象,同时需要携带其他参数

    今天有一个坑,同时要上传图片和文件,而且图片要展示缩略图,文件要展示列表. 我的思路是: 首先,只上传附件照片,这个直接看ele的官方例子就行,不仅仅上传附件照片,还同时上传其他参数. 然后,再做上传 ...

  5. 学习MVC之租房网站(六)-用户登录和权限控制

    在上一篇<学习MVC之租房网站(五)-权限.角色.用户管理>完成了权限.角色.用户的增删改查,现在将基于前面完成的内容,进行后台用户登录和权限控制功能的开发. 一.用户登录 用户登录涉及到 ...

  6. 【SSH学习笔记】用Struts2实现简单的用户登录

    准备阶段 在使用学习Struts2的时候首先要下载相应的架包 Struts2资源下载 这里建议下载第一个,在struts-2.5.14.1-all.zip里有很多实用的东西,不仅有架包还有官方为开发者 ...

  7. Linux学习笔记(八)Linux常用命令:用户登录查看命令

    一.查看登录用户信息 w [用户名] 二.Who who 三.查询当前登录和过去登陆的用户信息 last 四.查看所有用户最后一次登录时间 lastlog

  8. OAuth协议——PHP第三方登陆协议

    慕课网Badguy老师的良心课程! 总会有那种什么都不想干的时候,但现在的日子又不这么允许个人的放纵,我一般就只有这几个选择:看课程视频,看书,看小说..好像还是有可以做的事情.其中,看课程视频有点无 ...

  9. Github第三方登陆详细流程

    一. 流程图 二.具体实现步骤 Ⅰ.创建OAuth App 我们首先需要创建一个OAuth App,根据下图的步骤点击即可 依次填写信息,然后点Register application 然后我们可以看 ...

随机推荐

  1. sniffer 简介

    http://www.doc88.com/p-095375416629.html 介绍sniffer的工作原理及简单介绍.

  2. MySQL分组、链接的使用

    一.深入学习  group by group by ,分组,顾名思义,把数据按什么来分组,每一组都有什么特点. 1.我们先从最简单的开始: select count(*) from tb1 group ...

  3. .NET开发设计模式-单例模式

    解释:单例模式主要特点:确保一个类只有一个实例,并提供一个访问它的全局访问点 意思就是说:在多线程的情况下:A先进行创建了该实例.B再进来访问时就不需要再创建了. using System; usin ...

  4. 【Quartz】常用方法的使用方式(三)

    前言    总结了一下quartz组件的一些常用方法,以备将来不时之需.哈哈,看着挺简单有些好是值得笔记一下的.好记性不如烂笔头吗? 代码部分: 方法类内容: public class Example ...

  5. Pat1128:N Queens Puzzle

    1128. N Queens Puzzle (20) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The & ...

  6. 第一章:Netty介绍

    1. Netty介绍  Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端,Netty是基于NIO实现的,所以整个Netty都是异步操作,网络应用 ...

  7. POI处理Excel中各种日期格式问题

    前不久写过一篇随笔<EXCEL解析之终极方法WorkbookFactory>,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种 ...

  8. JAVA线程池shutdown和shutdownNow的区别

    一.区别介绍 shutDown()  当线程池调用该方法时,线程池的状态则立刻变成SHUTDOWN状态.此时,则不能再往线程池中添加任何任务,否则将会抛出RejectedExecutionExcept ...

  9. js判断浏览器是否支持flash的方法

    传统浏览器可以使用window.ActiveXObject检查浏览器是否启用相关的控件.检查浏览器是否启用flash控件,需要先检查浏览器是否支持ActiveXObject,可以使用typeof检查w ...

  10. Web前端原生JavaScript浅谈轮播图

    1.一直来说轮播图都是困扰刚进业内小白的一大难点,因为我们不仅需要自己作出一个比较完美的运动框架(虽然网上一抓一大把,但是哪有比自己做出来实现的有成就感,不是吗?^_^),还必须需要非常关键性的把握住 ...