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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值