Vue项目中添加钉钉登录

钉钉登录

说明:目前使用的钉钉后台还在更新中,可能和文章展示的不同

1. 准备工作,首先需要有自己管理的部门

1. 进入开发者后台扫码登陆,如果是组织的管理者就直接选择进入

在这里插入图片描述

2. 不是组织管理者

首先注册
在这里插入图片描述

创建团队

在这里插入图片描述

创建成功

在这里插入图片描述

进入手机APP查看

在这里插入图片描述

3. 如果是管理者
  1. 扫码登陆选择组织
    在这里插入图片描述
  2. 创建的个人团队目前只演示企业内部开发,创建应用为H5微应用或者小程序都可以
    在这里插入图片描述
    在这里插入图片描述
  3. 返回首页
    在这里插入图片描述
  4. 选择进入,添加回调域名,这里使用的是开发环境,所以添加了当前项目运行的地址和端口号
    在这里插入图片描述
    在这里插入图片描述
  5. 进入工作台
    在这里插入图片描述

在这里插入图片描述

4.前端开发过程,不管是扫码登录还是使用钉钉的账号密码登录,都需要导入一个js官方说明地址
  1. index.html中添加,window就会挂载一个DDLogin实例
    <script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
    
    在这里插入图片描述

2. 钉钉扫码登录支持网站将钉钉登录二维码内嵌到自己页面中

  1. 初始化钉钉登录,appid是在工作台配置登录的时候生成的,url中的回调地址也是在工作台中配置的,id对应的html中的标签
    在这里插入图片描述
<template>
  <div class="dd-scan-login">
    <div id="dd-login"></div>
  </div>
</template>
<script>
/** 钉钉扫码登录 */
const appid = 'dingoapbicykzzeqxpelxy'
const url = encodeURIComponent('http://127.0.0.1:9527/login')
const goto = encodeURIComponent(`https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appid}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${url}`)
export default {
  name: 'DDScanLogin',
  data() {
    return {}
  },
  created() {},
  mounted() {
    this.ddInit()
  },
  methods: {
    /** 初始化钉钉登录 */
    ddInit() {
      window.DDLogin({
        id: 'dd-login',
        goto, //请参考注释里的方式
        style: 'border:none;background-color:#FFFFFF;',
        width: '365',
        height: '400'
      })
    }
  }
}
</script>

页面的效果
在这里插入图片描述
手机端扫描之后
在这里插入图片描述

  1. 获取临时授权码loginTmpCode,使用监听message,这里获取到临时授权码loginTmpCode之后,可以将loginTmpCode传递给后台,后台处理之后,将数据返回(这里的逻辑是和后台沟通之后处理的,为了保持页面不用刷新,后台去使用loginTmpCode拼接一个url,就是这一步https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=SuiteKey&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI&loginTmpCode=loginTmpCode,之后获取一个code服务端通过临时授权码code获取授权用户的个人信息,进行了省略)
created() {
  window.addEventListener('message', this.DDMessage, false)
},
methods: {
  /** 钉钉登录 */
  DDMessage(event) {
    const origin = event.origin
    if (origin === 'https://login.dingtalk.com') {
      //判断是否来自ddLogin扫码事件。
      const loginTmpCode = event.data
      //获取到loginTmpCode后就可以在这里构造跳转链接进行跳转了
      console.log('loginTmpCode', loginTmpCode)
    }
  }
},
beforeDestroy() {
  window.removeEventListener('message', this.DDMessage, false)
}

3. 钉钉账号密码登录

  1. 为了不让页面刷新,使用iframe标签,sandbox="allow-scripts allow-same-origin allow-popups"可以阻止页面跳转
<iframe
   :src="iframeSrc"
   frameborder="0"
   id="dd-account-iframe"
   sandbox="allow-scripts allow-same-origin allow-popups"
></iframe>
<script>
const appid = 'dingoapbicykzzeqxpelxy'
const url = encodeURIComponent('http://127.0.0.1:9527/login')
export default {
  data() {
    return {}
  },
  computed: {
    iframeSrc() {
      return `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appid}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${url}`
    }
  },
  created() {},
  mounted() {},
  methods: {}
}
</script>
  1. 使用onload,获取code然后传递给后台
mounted() {
  this.ddLoginInit()
},
methods: {
  // 钉钉登录方法
  ddLoginInit () {
    const that = this
    document.getElementById('dd-account-iframe').onload = async function () {
      try {
        const getParams = this.contentWindow.location.href
        const getIndex = getParams.indexOf('code=')
        if (getIndex !== -1) {
          const getCode = getParams.split('=')[1].split('&')[0]
          console.log(getCode, 'getCode')
        }
      } catch (error) {
        console.log(error)
      } finally {
      }
    }
  }
}

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要实现 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`),并跳转到其他页面。 请注意,上述步骤只是一个大致的流程,具体实现还需要根据你的项目结构和需求进行调整。同时,钉钉开放平台提供了详细的文档和示例代码,建议你参考这些资源进行开发。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值