vue 钉钉授权第三方WEB网站扫码登录功能
文章目录
- 1. 钉钉扫码登录开发文档
- 2. 注册钉钉账号(已经注册了直接跳过)
- 3 获取APPID和appSecret
- 3.1 登录钉钉开发者后台
- 3.2 创建应用
- 4. vue实现扫码登录
- 4.1 html 代码
- 4.2 js代码
- 4.3 操作扫码效果
- 5. 获取钉钉的用户信息
- 5.1 通过后端提供的接口获取信息
- 5.2 通过前端调用钉钉的API查询信息
1. 钉钉扫码登录开发文档
首先阅读 钉钉官方的开发文档 ,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息。
钉钉扫码登录比微信扫码登录坑少很多。可以看下我的微信扫码登录实现 vue 微信扫码登录嵌入方式及开发踩的坑点
2. 注册钉钉账号(已经注册了直接跳过)
需要一个 注册钉钉的账号 ,用来获取APPID
3 获取APPID和appSecret
3.1 登录钉钉开发者后台
- 点击登录后台:开发者后台
注意
: 只有管理员和子管理员可登录开发者后台。否则你会看下如果提示 没有权限需要去联系你的上级给你开通
3.2 创建应用
①:在开发者后台页面
应用开发
,选择企业内部开发
,然后单击创建应用
。
②:在弹出的创建应用页面中填写基本信息,然后单击确定创建。
- 应用类型:选择H5微应用。
- 开发方式:选择企业自助开发。
- 还需要你要登录的第三方网站的网址,以及一张网站logo图片的地址。
③:应用创建完成后,在基础信息页面,复制应用的
AppKey
和AppSecret
备用。先放着。appSecret后面拿取钉钉的用户信息会用到
4. vue实现扫码登录
4.1 html 代码
创建一个div,设置id为
login_container
<template><div id="app"><div id="login_container"></div></div>
</template>
4.2 js代码
<script>
export default {name: "App",components: {},data() {return {appid: "dingoajfp9uov6uonxxxxxx",//自己申请的appidappsecret:"V6m2FeU_Ex0HMKmCfA5hV2edZCO_MMsWfWP8ZoCdH4-cTTqkoOIElwhxxxxxxxx",//自己申请的appsecretredirectUrl: "http://192.168.1.76:8080/#/login",//这里是扫码成功后跳转的回调地址dingCodeConfig: {id: "login_container",//匹配到设置的html的idstyle: "border:none;background-color:#FFFFFF;",width: "400",height: "400",},//生成二维码样式的配置};},computed: {getRedirectUrl() {return encodeURIComponent(this.redirectUrl);},getAuthUrl() {return `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${this.appid}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${this.getRedirectUrl}`;},getGoto() {return encodeURIComponent(this.getAuthUrl);},getDingCodeConfig() {return { ...this.dingCodeConfig, goto: this.getGoto };},},created() {// 初始化钉钉的二维码加载this.initDingJs();},mounted() {this.addDingListener();this.initDingLogin();},methods: {initDingJs() {!(function (window, document) {function d(a) {var e,c = document.createElement("iframe"),d = "https://login.dingtalk.com/login/qrcode.htm?goto=" + a.goto;(d += a.style ? "&style=" + encodeURIComponent(a.style) : ""),(d += a.href ? "&href=" + a.href : ""),(c.src = d),(c.frameBorder = "0"),(c.allowTransparency = "true"),(c.scrolling = "no"),(c.width = a.width ? a.width + "px" : "400px"),(c.height = a.height ? a.height + "px" : "400px"),(e = document.getElementById(a.id)),(e.innerHTML = ""),e.appendChild(c);}window.DDLogin = d;})(window, document);},addDingListener() {let self = this;let handleLoginTmpCode = (loginTmpCode) => {window.location.href =self.getAuthUrl + `&loginTmpCode=${loginTmpCode}`;};let handleMessage = (event) => {if (event.origin == "https://login.dingtalk.com") {handleLoginTmpCode(event.data);}};if (typeof window.addEventListener != "undefined") {window.addEventListener("message", handleMessage, false);} else if (typeof window.attachEvent != "undefined") {window.attachEvent("onmessage", handleMessage);}},initDingLogin() {window.DDLogin(this.getDingCodeConfig);},},async mounted() {if (this.$route.query.code) {let code = this.$route.query.codeconsole.log("扫码登录成功后请求后返回的code:" + code) //if (code !== null) {// 执行下一步操作}}}
};
</script>
4.3 操作扫码效果
- 电脑端url的变化:可以看到扫码之前是
http://192.168.1.76:8080/#/login
的地址(默认访问登录页面的地址) - 回调地址设置的地址:
http://192.168.1.76:8080/#/login
。 - 通过扫码成功后,返回的回调地址
http://192.168.1.76:8080/#/login?code=d06e0c4255c93213ab425aac556e563a&state=STATE
(返回了code和state参数键值回来)
手机钉钉扫码确认截图
5. 获取钉钉的用户信息
5.1 通过后端提供的接口获取信息
一般情况走到这一步了,可以直接把回调返回的
code
给后端,后端去写接口返回钉钉的用户信息。比下(我们后端提供的):
根据钉钉回调返回的code,调用后端的接口拿取钉钉的用户信息。
async mounted() {if (this.$route.query.code) {let code = this.$route.query.codeconsole.log('扫码登录成功后请求后返回的code:' + code)let res = await base.thirdPartyLoginCheck({code,linkType: 1})console.log(res)}
}
5.2 通过前端调用钉钉的API查询信息
这种情况就是前端去调用api,然后获取钉钉用户信息,调用的api比较繁琐,建议还是让后端提供接口,当前这种也是可以的。下面是具体的步骤
1.get请求的方式,请求这个地址。
get 请求方式
https://oapi.dingtalk.com/sns/gettoken?appid=APPID&appsecret=APPSECRET
2.请求成功时应该返回如下,access_token
的值放好,我们会拿它接着获取永久授权码。还记得我们扫码成功后,跳转登录到第三方网站的url吗,它后面追加了临时授权码code,这个code和access_token 一起就可以获得永久的授权码了。
{"errcode": 0,"access_token": "7155d0dca6fa3a489462e4407699c339","errmsg": "ok"
}
3.获取永久授权码。以post请求,请求这个地址
post 请求方式
https://oapi.dingtalk.com/sns/get_persistent_code?access_token=ACCESS_TOKEN
参数如下:
{
“tmp_auth_code”: “9282c00fed0a3e2a88fea069a9fe5be4”
}
请求成功返回如下,拿到tmp_auth_code
的值,就是追加到url上的code参数的值。请求成功返回如下
{"errcode": 0,"errmsg": "ok","unionid": "0wiiEFPtAF09FWcBg2iiygPwiEiE","openid": "EmuvN1jpiPwiipLtiSHBUmvcwiEiE" ,"persistent_code": "oMOoqK0PEfTXvJSMlZIp8yU-IagK8-kJIVY5od8-8Y2ijlX367M9uRNUvisDAPtX"
}
请求成功返回如下,拿到openid
和persistent_code
的值,接下来要用来去获取用户授权的SNS_TOKEN
4.获取用户授权的SNS_TOKEN。以post请求,请求这个地址,这个 ACCESS_TOKEN 第一步的时候已经取到过了
post 请求方式
https://oapi.dingtalk.com/sns/get_sns_token?access_token=ACCESS_TOKEN
参数如下:
{
“openid”: “EmuvN1jpiPwiipLtiSHBUmvcwiEiE”,
“persistent_code”: “oMOoqK0PEfTXvJSMlZIp8yU-IagK8-kJIVY5od8-8Y2ijlX367M9uRNUvisDAPtX”
}
请求成功返回如下,拿到 sns_token
{"errcode": 0,"errmsg": "ok","sns_token": "ea1e12af6ac23a2080178bb9a452b312","expires_in": 7200
}
5.最后一步了,用获取到的 sns_token 去拿用户信息,鸡冻~
get 方式请求
https://oapi.dingtalk.com/sns/getuserinfo?sns_token=SNS_TOKEN
请求成功返回如下,拿到用户信息
{"errcode": 0,"errmsg": "ok","user_info":{"nike":"张三","unionid":".......................","dingId":".......................","openid":".......................","......":"....."}
}
vue 钉钉授权第三方WEB网站扫码登录功能相关推荐
- 钉钉授权第三方WEB网站扫码登录
一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...
- Django使用Social-Auth实现微信第三方网站扫码登录
前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...
- Django实现微信第三方网站扫码登录
前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...
- Vue - 实现微信扫码登录功能(项目植入微信扫码登录功能)超详细完整流程详解及详细代码及注释,附带完整功能源码、常见问题解决方案
前言 如果您需要 Nuxt.js 版本的教程,请访问 Nuxt.js - 微信扫码登录功能. 网上的大部分教程都太乱且没有任何注释和解释,对于新手而言简直是根本无从下手, 本文将站在新手小白的角度,从 ...
- IM要做手机扫码登录?先看看微信的扫码登录功能技术原理
本文原文由作者Amazing10原创发布于公众号业余码农,收录时有改动,感谢原作者的技术分享. 1.引言 某天中午,吃完午饭,摊在自己的躺椅上,想趁吃饱喝足的午后时间静静享受独自的静谧. 干点什么好呢 ...
- IM的扫码登录功能如何实现?一文搞懂主流的扫码登录技术原理
本文引用了3位作者"精品唯居"." Yangfan2016"." MrYun"的部分文章内容,一并感谢. 1.引言 扫码登录这个功能,最早 ...
- 项目整合微信扫码登录功能
项目整合微信登录功能 一.准备工作 https://open.weixin.qq.com 1.注册 2.邮箱激活 3.完善开发者资料 4.开发者资质认证 准备营业执照,1-2个工作日审批.300元 5 ...
- IM扫码登录技术专题(三):通俗易懂,IM扫码登录功能详细原理一篇就够
本文引用了作者"大古同学"的"二维码扫码登录是什么原理"一文的主要内容,为了更好的理解和阅读,即时通讯网收录时有修订和改动,感谢原作者的分享. 1.引言 自从微 ...
- 微信扫码登录功能实现
原因:很简单,公司的账号登录需要用到微信扫码登录与QQ的登录功能,所以,在做好了微信的扫码登录之后,本人就写这篇微信扫码登录功能实现的教程 教程开始 需要用到的网站: https://open.wei ...
- 手把手教程用Java实现微信公众号扫码登录功能
文章目录 前言 一.环境准备 二.使用步骤 1. 使用微信工具包 2. 创建数据表 3. 登录页面代码逻辑 4. 验证微信公众号登录 总结 前言 微信现今是我们必不可少的社交工具了,围绕微信这个生态实 ...
最新文章
- 将二维序列变为一维度序列进行预测的设计
- Nodejs的express使用教程
- Java 洛谷 P1151 子数整数
- 《LINUX3.0内核源代码分析》第二章:中断和异常 【转】
- 彻底明白TCP的三次握手与四次挥手的两张动图
- 解决MSChart底部横坐标显示不全的问题
- linux sar命令找不到,linux的sar命令未找到
- 2012Android开发热门资料110
- Linux下python执行Killed
- java 车牌识别系统_java车牌识别系统 自动识别车牌系统的工作原理
- ubantu 14.04重置密码
- 要运行python程序要安装什么_求你要我(2)
- 五一假期游泰国:曼谷景点游玩省钱攻略
- 简单排序算法时间空间复杂度分析及应用(7)-希尔排序
- 英国内政部(Home Office)间谍机构(spy powers)假装它是Ofcom咨询中的一名私人公民1525445485395...
- MySQL DDL Duplicate entry '12' for key 'PRIMARY'
- dataTable 查询,重置
- 传播知识,分享快乐--我的相关资源下载(不定期更新)
- 算法竞赛中计算机1000ms一般能运行的范围
- 示例 在 ABAP 中使用自己的 RSA 实现 RSA Encryption in ABAP
热门文章
- 人工智能时代的风口项目,电话机器人源码和系统部署
- 火到爆的扩散模型(Diffusion Model)帮你具象化幻想世界
- VS 2017番茄插件安装破解教程:visual assist
- Vulkan教程 - 18 阶段性总结
- keil5.24 +注册机 下载
- 【UVM芯片漫游指南_000】总目录(下)——UVM目录
- kafka之生产者---总结自Kafka权威指南
- mtk刷机显示连接服务器失败,MTk线刷刷机出现的错误和解决方法
- capture 部分元器件编号_Capture新建元件符号文件
- python参考手册文字版_Python3.8标准库参考手册 中文完整pdf高清版