vue实现钉钉扫码登录

流程图

由于很多人问这个,发现并不是代码问题,都是流程不清楚导致,遂补一个流程图
在这里插入图片描述

如图所示:

在这里插入图片描述

官网文档:

扫码登陆第三方网站

代码如下:
//在public/index.html引入钉钉js
//需注意如果报错DDLogin未定义,需要将此代码放入head中或者body中,放在body-html标签之间有些项目会报错。
<script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
//html
// id必写,style是为了调整二维码大小,二维码官方固定尺寸,只好出此下策。
<div id="login_container" style="transform: scale(.8);"></div>
//在这里插入代码片
mounted(){
  //code是登录所需最终参数
  const { code } = this.$route.query
  if(code){ //登录接口
    this.handleCodeLogin(code)
  }else{ //钉钉二维码
    this.ddLoginInit()
  } 
},
methods: {
ddLoginInit(){
	//钉钉扫码流程:扫码成功登录后会自动跳到这个url页面,url路径会携带code,你拿到这个code,调用登录接口成功就跳转。
	//你的项目页面
   let url = encodeURIComponent('http://baidu.com.cn/weekly/#/login');
   // appid 找后端要
   let appid = 'dingappid'
   // 钉钉自己的url 修改上面俩,不需要动这个
   let goto = encodeURIComponent(`https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appid}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${url}`)
   let obj = DDLogin({
       id:"login_container",//这里需要你在自己的页面定义一个HTML标签并设置id,例如<div id="login_container"></div>或<span id="login_container"></span>
       goto: goto, //请参考注释里的方式
       style: "border:none;background-color:#FFFFFF;",
       width : "100%",//官方参数 365
       height: "300"//官方参数 400
   });
   let handleMessage =  (event) =>{
     let origin = event.origin;
     console.log("origin", event.origin);
     if( origin == "https://login.dingtalk.com" ) { //判断是否来自ddLogin扫码事件。
       let loginTmpCode = event.data; 
       //获取到loginTmpCode后就可以在这里构造跳转链接进行跳转了
       console.log("loginTmpCode", loginTmpCode);
       //此步拿到临时loginTmpCode换取正式code
       window.location.href = `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appid}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${url}&loginTmpCode=${loginTmpCode}`
     }
   };
   if (typeof window.addEventListener != 'undefined') {
       window.addEventListener('message', handleMessage, false);
   } else if (typeof window.attachEvent != 'undefined') {
       window.attachEvent('onmessage', handleMessage);
   }
 },
 handleCodeLogin(code){
   this.$store.dispatch('user/codeLogin', {authCode:code}).then((res) => {
   //到这里就成功了直接路由跳转,下面是我个人逻辑
   this.$router.push( '/index')
   //this.$store.dispatch('user/getMenuList').then(() => {
   // if(res.instType == 0){
   //  this.$router.push( '/queryWeekly')
   // }else{
   //  this.$router.push( '/addWeekly')
   // }
   // this.loading = false
   //})
   }).catch(() => {
     this.$router.push( '/')
     this.loading = false
   })
 },
}

备注: 阴晴不定,小雨连绵;春困夏乏秋打盹,睡不醒的冬三月。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
实现 Vue 3 钉钉扫码登录,你可以按照以下步骤进行操作: 1. 在钉钉开放平台注册开发者账号,并创建一个应用,获取到 `AppKey` 和 `AppSecret`。 2. 在 Vue 3 项目中安装 `axios`,用于发送 HTTP 请求。可以使用以下命令安装: ``` npm install axios ``` 3. 创建一个登录组件,可以命名为 `Login.vue`,在该组件中包含一个用于展示钉钉扫码的部分。 4. 在 `Login.vue` 组件中,使用钉钉开放平台提供的前端 SDK 进行扫码登录。你可以在 `created` 钩子函数中调用 `dd.config` 方法进行配置,然后调用 `dd.scan` 方法进行扫码操作。 5. 当用户完成扫码并授权登录后,钉钉会回调一个临时授权码。 6. 在 Vue 3 中,你可以在 `Login.vue` 组件中使用 `axios` 发送一个 POST 请求,将临时授权码发送到后端服务器。 7. 后端服务器接收到临时授权码后,使用 `AppKey` 和 `AppSecret` 向钉钉开放平台发送请求,获取用户的持久授权码和用户信息。 8. 后端服务器将持久授权码和用户信息保存在数据库中,并生成一个用户标识(如用户 ID)返回给前端。 9. 前端收到用户标识后,可以将其保存在本地(如使用 `localStorage`),并跳转到其他页面。 请注意,上述步骤只是一个大致的流程,具体实现还需要根据你的项目结构和需求进行调整。同时,钉钉开放平台提供了详细的文档和示例代码,建议你参考这些资源进行开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘斩仙的笔记本

富贵险中求

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值