vue使用钉钉扫码登录

本文详细描述了如何在H5应用中集成钉钉登录功能,包括创建H5微应用、获取AppKey和AppSecret、配置权限、设置回调域名以及在前端页面实现钉钉扫码登录的JavaScript代码。
摘要由CSDN通过智能技术生成

最近因项目要求要在登录页增加第三方登录,微信/钉钉。微信扫码登录想必大家都做过,钉钉之前也没接触过。找到开发者文档挨个看,首先我们的需求属于企业内部应用下的H5微应用 ,在开发者后台创建H5微应用,创建时让管理员给设置下权限,不然后面没办法操作。

在这里插入图片描述
在这里插入图片描述

如上图 点击创建应用,输入应用的信息就可以了。然后在凭证与基础信息页面,复制应用的AppKey和AppSecret备用

在这里插入图片描述

然后点击 添加应用能力,这里我选择的是网页应用,添加成功后点击配置按钮 配置开发的信息

在这里插入图片描述

这里必须要让管理员给开通权限,不然没办法添加。然后点击权限管理,根据自身的需求设置权限,这里我只选择了两个

在这里插入图片描述

在分享设置中添加回调域名,这里添加登录页地址就行

在这里插入图片描述
以上便是自己实操过的一些配置流程,可能不是特别详细,大家看不明白的可以看下钉钉开放平台文档 钉钉开放平台

钉钉扫码登录分为两种,第一种是钉钉二维码单独跳转页面进行扫码登录,第二种是将钉钉登录二维码内嵌到自己页面上。这里我采用的是第二种方式。对应文档

接下来就开始构造登录页面了,在public文件下的index.html中先引入如下JS文件(支持HTTPS)

<script src="https://g.alicdn.com/dingding/h5-dingtalk-login/0.21.0/ddlogin.js"></script>

在登录页定义一个二维码的容器

<!-- 钉钉登录 -->
<div class="login-form" v-show="ddShow">
	<div class="title-container">
		<h3 class="title md-title">钉钉扫码登录</h3>
	</div>
	<div id="dd_login" style="margin: 0 auto;width: 250px; height: 250px;"></div>
	<p class="login-alt">请使用钉钉扫描二维码登录</p>
</div>

初始化

<script>
import axios from "axios";
import * as dd from "dingtalk-jsapi";
import { getCode, logoSendCode } from '@/api/user.js'
export default {
	name: 'Login',
	data() {
		return {
			appKey: "xxxxx",//在凭证与基础信息页面中查看对应的appkey
			dingRedirectUrl: encodeURIComponent("http://192.168.1.123:9527/srp/Admin/#/login"),//必须和钉钉后台配置的重定向域名一致,这里也可以改成域名。
		}
	},
	mounted() {
		//钉钉登录
		const { code, authCode, state } = this.$route.query;
		this.ddLogin();
	},
	methods:{
		//调起钉钉内嵌二维码
		ddLogin() {
			  let url = this.dingRedirectUrl
			  window.DTFrameLogin(
			    {
			      id: 'dd_login',
			      width: 280,
			      height: 280,
			    },
			    {
			      redirect_uri: encodeURIComponent("http://192.168.1.123:9527/srp/Admin/#/login"),//必须和钉钉后台配置的重定向域名一致,这里也可以改成域名,重定向URL也要和浏览器访问的地址保持一致,不然扫码后无反应。
			      client_id: this.appKey,
			      scope: 'openid',
			      response_type: 'code',
			      state: this.randomString(10),
			      prompt: 'consent',
			    },
			    (loginResult) => {
				  const { redirectUrl, authCode} = loginResult;
			      // 根据后端提供的接口,向后端传递临时授权码使,用code进行授权
			      axios.get(`http://192.168.1.56:8080/auth/validate/getUserInfo?authCode=${authCode}`)
			        .then(response => {
			          localStorage.setItem("token", JSON.stringify(response.data))
					  let params = {
						  grant_type: 'dingTalk_id',
						  scope: 'admin',
						  openId : response.data.data
					  }
					  //调用接口  通过后端返回的openId进行登录
					  mobileLogin(params).then(res => {
						  if(res.status === 200){
							this.$message({
							  message: "扫码成功",
							  type: "success",
							});

							this.$store.dispatch('user/login', params).then(() => {
								this.$router.push({
									path: 'index'
								})
							})

						  }else{
							  this.$message.error({
							    message: "钉钉没有绑定账号,请使用手机号登录后进入设置中绑定",
							    type: "success",
							  })
						  }
					   })
			         })
			        .catch(error => {
						this.$message({
						  message: "登录失败",
						  type: "error",
						});
			          console.log('请求失败', error)
			        })
			 
			    }
			  )
			},
			randomString(len) {
			  len = len || 10;
			  let $chars = "ABCDEFGHIJKMNOPQRSTUVWXYZ"; // 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1
			  let maxPos = $chars.length;
			  let pwd = "";
			  for (var i = 0; i < len; i++) {
			    pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
			  }
			  return pwd;
			}		
				
	}
	}
    </script>

接下来本地运行下,就能看到钉钉二维码了,可以使用钉钉进行扫码登录了

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值