Github登录实战流程

前言

功能其实早已经实现了,一直没有做记录,没办法,实在是懒啊!近段时间武汉比较艰难, 疫情肆虐,城都封了,在家里憋了好久,终于想着该弄弄博客了,好吧,把之前没来得及写的补上!

在做登录之前,博客大致的功能基本都已经实现的差不多了,剩下的应该都是一些细节上的完善,我觉得一个像样的博客,登录还是必不可少的,我又不想做那种老套的账号密码,给人体验也不好,做第三方登录似乎是最快捷也最实在的,点点按钮就搞定,你好我好大家都好,下面进入正题!

先看看效果:

 

梳理流程

github登录大致的流程分为以下几步:

  • 设置Github的OAuth Apps
  • 获取临时code
  • 通过code向Github请求用户信息
  • 拿到用户信息做后续处理

 

设置Github的OAuth Apps

登录自己的Github账号,依次点击右侧头像---Settings---Developer settings---OAuth Apps---New OAuth Apps

进行设置,页面如下图:

微信图片_20190420132256.png

第一栏填写名字,第二栏是你博客的访问地址,第三栏描述,第四栏是第一次请求Github获取临时code的回调地址,简单说就是获取code后返回的显示页面,设置好了之后可以拿到你的client_id和client_secret,后面会用到。

 

获取临时code

这一步很简单,发送请求获取code,请求成功后返回的是你上面设置的回调地址,并带上参数code值给你,所以我们需要做的就是请求后跳转到返回的回调地址,并且接收code,然后拿code去请求用户信息

需要注意的是在请求发送之前最好缓存一下当前页面,后续完成登陆流程后需要跳回到这个页面,以免影响用户体验

以vue为例,请求Github获取code:

methods: {
    //登录
    login(){
    //保存当前页面路由
    localStorage.setItem("currentRoute",this.$route.path)
    //github请求code
    const url = '/github/login/oauth/authorize?client_id=你的client_id&redirect_uri=你的redirect_uri'
    //路径跳转
    window.location.href = url
}

调用后台接口请求用户信息:

created() {
  var code = this.$route.query.code
  //请求github获取用户信息,
  this.getToken(code)
},
methods: {
  //后台获取用户信息接口
  getToken(code){
    getToken(code).then((res) => {
      if(res.code == 200){
        this.$message({
          type: 'success',
          center: true,
          message: '登录成功!'
        });
        //跳转回之前的路由路径
        var path = localStorage.getItem("currentRoute")
        //保存用户信息
        localStorage.setItem('userinfo',res.data)
        that.$router.push(path);
        //清除延迟执行
        clearTimeout(this.timer);     
        //延迟执行
        this.timer = setTimeout(()=>{
          location.reload()
        },500);
      }
    })
  }
}

 

通过code像Github请求用户信息

以java为例,获取用户信息:

public String githubSign(String code) {
    String userinfo = "";
    //获取access_token
    Map<String, String> tokenMap = new HashMap<>();
    tokenMap.put("client_id",GITHUB_CLIENT_ID);                 //client_id
    tokenMap.put("client_secret",GITHUB_CLIENT_SECRET);         //client_secret
    tokenMap.put("code",code);                                  //code
    String access_token = HttpUtil.doGet(GET_GITHUB_TOKEN,tokenMap);
    //如果access_token存在
    if(StringUtils.isNotBlank(access_token)){
        //拼接,请求用户信息
        String path = "https://api.github.com/user?" + access_token;
        userinfo = HttpUtil.doGet(path);
    }
    log.info("userinfo: " + userinfo);
​
    return userinfo;
}

 

拿到用户信息做后续处理

拿到用户信息后返回给前端,后续怎么处理就随便你咯。

 

结语

以上就是Github登录的完整流程,由于之前被攻击的经历还历历在目,不方便提供源码支持,如有疑问可以在下方留言,或者直接联系本人,至于怎么联系,登录后自然就知道啦!

 

标题:Github登录实战流程

地址:http://blog.ivan.group/article/19

文章转载自:Ivan | 晏飞个人博客 [http://blog.ivan.group]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值