文章目录

  • 实现效果
  • 具体实现
    • 一、申请weibo网站接入
    • 二、点击按钮微博登录
      • 1. 生成微博登录授权验证码
      • 2. 授权页面跳转,获取用户code
      • 3. 后端登录回调接口,通过用户code获取accessToken,再通过accessToken获取用户信息,完成登录
    • 三、微博扫码登录
      • 1. 生成微博扫码登录二维码
      • 2. 前端不停轮询,查询此二维码是否被扫码授权

接入微博第三方登录可以免注册,对用户的体验更好,今天我们就用nodejs实现微博第三方登录(用其它语言也可以)。

实现效果

在线实例: http://www.lolmbbs.com/login

  1. 点击微博登录按钮登录
  2. 直接扫码登录

具体实现

一、申请weibo网站接入

登录https://open.weibo.com/connect申请web网站接入
本地开发的时候应用地址写:127.0.0.1


二、点击按钮微博登录

采用OAuth2.0授权,详细可参考文档https://open.weibo.com/wiki/Connect/login

1. 生成微博登录授权验证码
const weiboUrl = `https://api.weibo.com/oauth2/authorize?client_id=${weiboConfig.appKey}&response_type=code&redirect_uri=${weiboConfig.redirectUrl}`

appKey: 创建应用成功后weibo给你的appKey
redirectUrl: 用户授权成功后跳转的你的前端页面,我这里写的是http://127.0.0.1:8080/login

2. 授权页面跳转,获取用户code

用户授权登录后,会跳转到你上一步写的redirectUrl,并带上用户code,url类似于http://127.0.0.1:8080/login?code=abcdef

vue监听路由url,如果url上有code就去请求后端的登录回调接口

created() {const { code } = this.$route.query;if (code) {loginCallback({ code }).then((res) => {this.$message({message: `${res.nickname} 欢迎您`,type: "success",});this.setUser(res);this.$router.push("/tool/qr");});}}
3. 后端登录回调接口,通过用户code获取accessToken,再通过accessToken获取用户信息,完成登录
   async loginCallback(ctx) {let { code } = ctx.request.bodyif (!code) {return ctx.error(errCode.PARAMS_ERROR, '参数错误')}// 获取accessTokenconst { access_token, uid } = await got.post('https://api.weibo.com/oauth2/access_token', {form: {client_id: weiboConfig.appKey,client_secret: weiboConfig.appSecret,grant_type: 'authorization_code',redirect_uri: weiboConfig.redirectUrl,code}}).json()// 通过accessToken获取UserInfoconst { id, name: nickname, avatar_hd: avatar } = await got.get(`https://api.weibo.com/2/users/show.json?access_token=${access_token}&uid=${uid}`).json()// 在自己的系统内创建Userlet [user, isCreate] = await WeiboUser.upsert({ id, nickname, avatar })// 生成登录Token,通过userType区分是微博登录用户还是系统账号登录用户const token = await jwt.createToken({ ...user.toJSON(), userType: 'weiboUser' })return ctx.success({ nickname, avatar, token })}

三、微博扫码登录

1. 生成微博扫码登录二维码
 async getWeiboLoginQr(ctx) {const qrApi = `https://api.weibo.com/oauth2/qrcode_authorize/generate?client_id=${weiboConfig.appKey}&redirect_uri=${weiboConfig.redirectUrl}&scope=&response_type=code&state=&__rnd=${Date.now()}`const { url, vcode } = await got.get(qrApi).json()return ctx.success({ weiboQrUrl: url, vcode })
}

返回的url就是微博登录二维码url,vcode相当于此二维码唯一标识,用来查询用户是否扫码

2. 前端不停轮询,查询此二维码是否被扫码授权

前端:

 const id = setInterval(() => {getWeiboLoginQrStatus({ vcode }).then((res) => {const { status, url } = res;if (status === "3") {window.location = url;clearInterval(id);}});
}, 3000);

后端:

   async getWeiboLoginQrStatus(ctx) {const { vcode } = ctx.request.queryif (!vcode) {return ctx.error(errCode.PARAMS_ERROR, '参数错误')}const queryQrApi = `https://api.weibo.com/oauth2/qrcode_authorize/query?vcode=${vcode}&__rnd=${Date.now()}`const { status, url } = await got(queryQrApi).json()return ctx.success({ status, url })}

如果status为3,代码用户已经扫码授权了,同时返回的url即点击按钮登录后的前端回调url。之后的步骤就跟2. 授权页面跳转,获取用户code一模一样了.

nodejs实现微博第三方登录相关推荐

  1. web接入微博第三方登录

    微博第三方登录 最近刚好在学习第三方登录,这里先做一下微博第三方登录的记录,因为qq第三方登录必须要完成网站备案后才能进行,后面再进行补充. 大致可以分成下面几个步骤 下面根据我自己的实现过程做一下总 ...

  2. 微博第三方登录,拿捏了

    什么是第三方登录? 用户登录操作不是基于自身建设账号体系,而是基于用户在第三方平台上已有的账号和密码来快速完成登录的过程.下面我列举了几点第三方登录的优点. 极大的简化登录注册的流程. 方便用户快捷登 ...

  3. java 微博第三方登录_java第三方登录(微博,QQ)详细代码

    第三方登录,首先需要设计扩展性的表结构.参照如下:本文主要写第三方登录的代码. 浅谈数据库用户设计:http://www.cnblogs.com/jiqing9006/p/5937733.html 可 ...

  4. 关于微博第三方登录的Javascript的实现方法

    微博官方API支离破碎,仿佛都是实习生的练手之作.让我这种大菜鸟郁闷不已,搜网上的微博第三方登录,基本都是只有问题没有解决结果.最后解决了,所以写下这篇文章,已祭奠我的一上午. 首先,登录http:/ ...

  5. java判断用户是否在某一个区域登录_Java实现QQ登录和微博第三方登录

    来源:http://www.cnblogs.com/liuxianan转自公众号:Java后端 1. 前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了 QQ 和微博这 2 大常 ...

  6. java 微博第三方登录_Connect/login - 微博API

    微博登录 微博登录包括身份认证.用户关系以及内容传播.允许用户使用微博帐号登录访问第三方网站,分享内容,同步信息.它有如下特点: • 直接用微博账号登录你的应用或网站: • 获得高质量微博活跃用户: ...

  7. java qq微信微博第三方登录界面_android 实现第三方登录(微博、微信、QQ登录)

    [实例简介]此案例是演示案例,大家可以看到Bmob的第三方登录和信息获取如何工作的 实现了 qq.微信.微博的 第三方登录功能 [实例截图] [核心代码] package com.bmob.demo. ...

  8. iOS 微博第三方登录的简单实现

    一.下载微博SDK 微博SDK的官方github : https://github.com/sinaweibosdk/weibo_ios_sdk 下载所需要的SDK 二.集成SDK 下载后的SDK文件 ...

  9. yii 框架微博第三方登录

    Yii2集成第三方微博登录(包含账号申请.建表和常用业务逻辑全套流程) 第三方登录 yii php 星空幻颖 2016年09月28日发布 赞  |   0 收藏  |  8 1.5k 次浏览 微博登录 ...

  10. django实现,微博第三方登录超详细

    登录流程 前端获取认证code 在Vue页面加载时动态发送请求获取微博授权url django收到请求的url后,通过微博应用ID(client_id)和回调地址(redirect_uri)动态生成授 ...

最新文章

  1. BZOJ1491: [NOI2007]社交网络(Floyd 最短路计数)
  2. 灰度重心法原理与实现
  3. POJ 1741 Tree(树分治)
  4. WinForm 数据库无限填充树目录 treeView
  5. hierarchy change in CRM - step1 inbound CSAIBASE queue
  6. 百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题
  7. nginx怎么升级php的版本号,nginx 升级指南,最详细的nginx升级步骤
  8. Android自定义选座,Android实现电影院选座效果
  9. 什么是特洛伊木马病毒?
  10. Unity使用Aspose.Words创建表格和UI截图一起插入到Word中并保存到本地的一种解决方案
  11. 【开源电机驱动】H桥的安全保护机制
  12. python+pytesseract本地pdf识别转文字,图片识别转文字,避坑大量识别转文字时的内存泄露问题解决
  13. 腾讯云产品介绍——腾讯云云服务器之运维指南
  14. 【Yolov5】训练自己的yolov5模型并集成到安卓应用中【上】——模型训练
  15. 台式计算机没有外放声音,台式机没有音响如何外放声音
  16. Css3之画五角星跟六角星
  17. 如何从网上下载一段视频(iawia002)
  18. 【转】《伤心者》作者:何夕 ——对有些东西是不应该过多讲求回报的,你不应该要求它们长出漂亮的叶子和花来,因为它们是根...
  19. 晶振01——晶振分类和无源晶振的设计
  20. 【经验分享】打通“任督”二脉——企业数字化转型中如何构建DevOps能力体系?

热门文章

  1. Pycharm进入debug模式后一直显示collecting data解决方法
  2. PHP RSA 报错 openssl_sign(): supplied key param cannot be coerced into a private key
  3. 如何通过链脉智能名片提高品牌知名度
  4. 单龙芯3A3000-7A1000PMON研究学习-(15)撸起袖子干-先来一杯代码吧
  5. Duilib使用wke显示echarts
  6. nas 和 远程文件夹同步_我应该如何使用Qsync来同步我计算机和NAS上的档案?
  7. 最小割集Stoer-Wagner算法
  8. 关于第三方支付,看这篇文章就够了!
  9. 识别中文_文字的效率:中英韩日四国文字识别效率对比,中文遥遥领先
  10. 【雅思单词】【绿皮书】雅思单词-错词-第三遍