文章目录

  • 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 登录钉钉开发者后台

  1. 点击登录后台:开发者后台
  2. 注意: 只有管理员和子管理员可登录开发者后台。否则你会看下如果提示 没有权限需要去联系你的上级给你开通

3.2 创建应用

①:在开发者后台页面应用开发,选择企业内部开发,然后单击创建应用

②:在弹出的创建应用页面中填写基本信息,然后单击确定创建。

  1. 应用类型:选择H5微应用。
  2. 开发方式:选择企业自助开发。
  3. 还需要你要登录的第三方网站的网址,以及一张网站logo图片的地址。

③:应用创建完成后,在基础信息页面,复制应用的AppKeyAppSecret备用。先放着。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 操作扫码效果

  1. 电脑端url的变化:可以看到扫码之前是 http://192.168.1.76:8080/#/login 的地址(默认访问登录页面的地址)
  2. 回调地址设置的地址:http://192.168.1.76:8080/#/login
  3. 通过扫码成功后,返回的回调地址
    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"
}

请求成功返回如下,拿到openidpersistent_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网站扫码登录功能相关推荐

  1. 钉钉授权第三方WEB网站扫码登录

    一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...

  2. Django使用Social-Auth实现微信第三方网站扫码登录

    前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...

  3. Django实现微信第三方网站扫码登录

    前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...

  4. Vue - 实现微信扫码登录功能(项目植入微信扫码登录功能)超详细完整流程详解及详细代码及注释,附带完整功能源码、常见问题解决方案

    前言 如果您需要 Nuxt.js 版本的教程,请访问 Nuxt.js - 微信扫码登录功能. 网上的大部分教程都太乱且没有任何注释和解释,对于新手而言简直是根本无从下手, 本文将站在新手小白的角度,从 ...

  5. IM要做手机扫码登录?先看看微信的扫码登录功能技术原理

    本文原文由作者Amazing10原创发布于公众号业余码农,收录时有改动,感谢原作者的技术分享. 1.引言 某天中午,吃完午饭,摊在自己的躺椅上,想趁吃饱喝足的午后时间静静享受独自的静谧. 干点什么好呢 ...

  6. IM的扫码登录功能如何实现?一文搞懂主流的扫码登录技术原理

    本文引用了3位作者"精品唯居"."  Yangfan2016"." MrYun"的部分文章内容,一并感谢. 1.引言 扫码登录这个功能,最早 ...

  7. 项目整合微信扫码登录功能

    项目整合微信登录功能 一.准备工作 https://open.weixin.qq.com 1.注册 2.邮箱激活 3.完善开发者资料 4.开发者资质认证 准备营业执照,1-2个工作日审批.300元 5 ...

  8. IM扫码登录技术专题(三):通俗易懂,IM扫码登录功能详细原理一篇就够

    本文引用了作者"大古同学"的"二维码扫码登录是什么原理"一文的主要内容,为了更好的理解和阅读,即时通讯网收录时有修订和改动,感谢原作者的分享. 1.引言 自从微 ...

  9. 微信扫码登录功能实现

    原因:很简单,公司的账号登录需要用到微信扫码登录与QQ的登录功能,所以,在做好了微信的扫码登录之后,本人就写这篇微信扫码登录功能实现的教程 教程开始 需要用到的网站: https://open.wei ...

  10. 手把手教程用Java实现微信公众号扫码登录功能

    文章目录 前言 一.环境准备 二.使用步骤 1. 使用微信工具包 2. 创建数据表 3. 登录页面代码逻辑 4. 验证微信公众号登录 总结 前言 微信现今是我们必不可少的社交工具了,围绕微信这个生态实 ...

最新文章

  1. 将二维序列变为一维度序列进行预测的设计
  2. Nodejs的express使用教程
  3. Java 洛谷 P1151 子数整数
  4. 《LINUX3.0内核源代码分析》第二章:中断和异常 【转】
  5. 彻底明白TCP的三次握手与四次挥手的两张动图
  6. 解决MSChart底部横坐标显示不全的问题
  7. linux sar命令找不到,linux的sar命令未找到
  8. 2012Android开发热门资料110
  9. Linux下python执行Killed
  10. java 车牌识别系统_java车牌识别系统 自动识别车牌系统的工作原理
  11. ubantu 14.04重置密码
  12. 要运行python程序要安装什么_求你要我(2)
  13. 五一假期游泰国:曼谷景点游玩省钱攻略
  14. 简单排序算法时间空间复杂度分析及应用(7)-希尔排序
  15. 英国内政部(Home Office)间谍机构(spy powers)假装它是Ofcom咨询中的一名私人公民1525445485395...
  16. MySQL DDL Duplicate entry '12' for key 'PRIMARY'
  17. dataTable 查询,重置
  18. 传播知识,分享快乐--我的相关资源下载(不定期更新)
  19. 算法竞赛中计算机1000ms一般能运行的范围
  20. 示例 在 ABAP 中使用自己的 RSA 实现 RSA Encryption in ABAP

热门文章

  1. 人工智能时代的风口项目,电话机器人源码和系统部署
  2. 火到爆的扩散模型(Diffusion Model)帮你具象化幻想世界
  3. VS 2017番茄插件安装破解教程:visual assist
  4. Vulkan教程 - 18 阶段性总结
  5. keil5.24 +注册机 下载
  6. 【UVM芯片漫游指南_000】总目录(下)——UVM目录
  7. kafka之生产者---总结自Kafka权威指南
  8. mtk刷机显示连接服务器失败,MTk线刷刷机出现的错误和解决方法
  9. capture 部分元器件编号_Capture新建元件符号文件
  10. python参考手册文字版_Python3.8标准库参考手册 中文完整pdf高清版