vue3飞书扫码登录网页

news2024/11/25 20:55:52

二维码 SDK 接入文档

飞书官方文档链接
https://open.feishu.cn/document/common-capabilities/sso/web-application-sso/qr-sdk-documentation
最后更新于 2023-08-08

概述

为了实现网页接入飞书授权登录工作,将飞书登录的二维码嵌入到网页中。当用户扫码成功后会返回 tmp_code,即可用来完成后续的授权登录流程。

使用方法步骤

  1. 在html种引入srcipt标签
<script src="https://lf-package-cn.feishucdn.com/obj/feishu-static/lark/passport/qrcode/LarkSSOSDKWebQRCode-1.0.3.js"></script>
  1. 编写一个div容器,用来渲染二维码
 <div id="fslogin"></div>
 <el-button @click="handleFeishu">点击生成二维码</el-button>	
  1. 定义飞书数据,通过全局对象 window.QRLogin 创建实例
const feishu = reactive({
  dialogVisible: false,
  QRLoginObj: '', // 是否生成了二维码
  client_id: 'xxxx', // 应用的AppID
  redirect_uri: 'http://xxx', // 应用配置重定向的地址
  fs_url: ''
})
//点击按钮,生成二维码
const handleFeishu = ()=>{
  if (feishu.QRLoginObj !== '') return false; // 避免重复点击
  feishu.fs_url = `https://passport.feishu.cn/suite/passport/oauth/authorize?client_id=${feishu.client_id}&redirect_uri=${feishu.redirect_uri}&response_type=code&state=STATE`;
  feishu.QRLoginObj = QRLogin({
    id: 'fslogin', //二维码展示区域的元素id
    goto: feishu.fs_url, //授权页面地址
    width: '260', //二维码展示区域的宽(二维码的尺寸固定为250px*250px)
    height: '260', //二维码展示区域的高
    style: 'width:260px;height:260px;border:none' //可选的,二维码html标签的style属性
  })
  if (typeof window.addEventListener != 'undefined') {
    window.addEventListener('message', handleMessage, false);
  } else if (typeof window.attachEvent != 'undefined') {
    window.attachEvent('onmessage', handleMessage);
  }
}

window.QRLogin 入参字段说明:

字段名类型属性描述
idstringrequired二维码展示区域的元素id
gotostringrequired授权页面地址,获取方式
widthstringoptional二维码展示区域的宽(二维码的尺寸固定为250px*250px)
heightstringoptional二维码展示区域的高
stylestringoptional二维码展示区域的样式

window.QRLogin 会返回一个方法 matchOrigin 用来校验域名是否匹配飞书的域名,并同时会返回一个方法 matchData 用来校验数据是否合法。

  1. 通过如下方式监听,当用户扫码成功后,即可获取 tmp_code,然后在授权页面地址(入参中的goto参数)上拼接上参数 tmp_code,并跳转到该地址:
const handleMessage =()=> {
  // 使用 matchOrigin 和 matchData 方法来判断 message 和来自的页面 url 是否合法
  if (feishu.QRLoginObj.matchOrigin(event.origin) && feishu.QRLoginObj.matchData(event.data)) {
    var loginTmpCode = event.data.tmp_code;
    // 链接处理完成后,会重定向到该链接的 redirect_uri 参数所指定的地址,并带上一个授权码(code)
    // 在授权页面地址上拼接上参数 tmp_code,并跳转
    window.location.href = `${feishu.fs_url}&tmp_code=${loginTmpCode}`;
    //注意:如果跳转的URL和当前页面是同一地址,后续可以通过监听window.onload事件判断页面是否加载完成,再执行其他操作
  }
}

该链接处理完成后,会重定向到该链接的 redirect_uri 参数所指定的地址,并带上一个授权码(code)。通过授权码可以获取 access_token。

这步需要注意是【开发者后台-安全设置-重定向的URL地址】,URL是不能带#号的,可添加多个URL, 参考文档https://open.feishu.cn/document/uYjL24iN/uYjN3QjL2YzN04iN2cDN

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1070941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

斐波那契前 n 项和 - 矩阵乘法快速幂

1303. 斐波那契前 n 项和 - AcWing题库 构造矩阵A使 0 1 0 A [ 1 1 1 ] 0 0 1 然后对这个式子进行快速幂&#xff0c;挺神奇的 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);ci…

gcc 9版本 使用std::thread时候 的链接错误 undefined reference to `pthread_create‘

偶然发现 同样的代码 在 不同版本的ubuntu上编译的时候 一个能编译通过 一个不能 编译通过的版本 编译失败的版本 编译失败的提示 找不到pthread_create函数 成功的系统是ubuntu22.04 失败的是 ubuntu18.04 失败的加上lpthread 库之后可以编译过 ldd看下 可以发现…

保卫你的应用:探索过滤器和拦截器的奥秘

保卫你的应用&#xff1a;探索过滤器和拦截器的奥秘 前言概述实现原理不同使用范围不同触发时机不同注入Bean情况不同springboot中的实现 前言 在现代Web开发中&#xff0c;安全性和性能是至关重要的因素。过滤器和拦截器是Web应用中的两个关键概念&#xff0c;它们可以帮助你…

【软件测试】JUnit详解

文章目录 一. Junit是什么?二.Junit中常见的注解1. Test2. BeforeAll & AfterAll3. BeforeEach & AfterEach4. ParameterizedTest参数化5. Disabled6. Order 三. 测试套件1. 通过class运行测试用例2. 通过包运行测试用例 四. 断言 一. Junit是什么? JUnit是一个用于…

3D打印机升级killpper

本来是想整台新机的&#xff0c;但是想想老机器4max也不能就此放弃&#xff0c;看了看视频&#xff0c;改装升级似乎也没有那么难。然后就是换了喷头、皮带、轴承、挤出机、打印平台、加热板等等。做了干燥箱&#xff0c;改装挤出机结构来适配&#xff0c;风扇口也一并搞掉&…

Astory 访谈|了解「非常律师禹英禑」背后的故事

请先简单做个自我介绍吧&#xff1f; 大家好&#xff0c;我是 Astory 的首席制作人 Younghwa Lee&#xff0c;负责监督《非常律师禹英禑》的制作。很高兴认识你。 是什么启发了你创造了《非常律师禹英禑》系列&#xff1f; 作为制片人&#xff0c;我非常感谢全球粉丝对《非常…

NVIDIA ORIN GPIO

NVIDIA ORIN GPIO 说明 1.Identifying the GPIO Number If you designed your own carrier board, to translate from SOM connector pins to actual GPIO numbers, you must understand the following GPIO mapping formula. The translated GPIO numbers can be controlled …

2023软件测试面试题大全

1.B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&#xff0c;可以实现跨平台&#xff0c;客户端零维护&#xff0c;维护成本低&#xff0c;但是个性化能力低&#xff0c;响应速度较慢 C/S响应速度快&#xff0c;安全性强&#xff0c;一般应用于局域网中&#xff0c;…

Bootstrap元素的边框样式和设置

目录 01-添加完整边框、上边框、右边框、下边框、左边框02-不要整个边框、上边框、右边框、下边框、左边框03-指定边框的颜色04-设置圆角边框和圆形边框 01-添加完整边框、上边框、右边框、下边框、左边框 示例代码如下&#xff1a; <!DOCTYPE html> <html> <…

关于 Vite 的浅显学习 - 总览

大部分内容来源于vite官网&#xff0c;部分内容来自于 自己测试和总结 Vite 官方中文文档 总览 Vite 是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。&#xff08;vue 官网打造的&#xff0c;旧一代是 webpack&#xff09; 它主要由两部分组成&#xff1a; 一…

ASPICE标准快速掌握「4.2. 过程能力等级与过程属性」

过程能力等级 0 级:不完整的过程 过程未实施、或未能实现其过程目的。在这个等级只有很少或没有系统化实现过程目的的证据。 过程能力等级 1 级:已执行的过程 已执行的过程实现其过程目的。以下过程属性证明这个等级的实现: PA 1.1 过程实施过程属性 <成就> 过程…

【Redis】Redis中的数据结构和内部编码

Redis中的数据结构和内部编码 type命令实际返回的就是当前键的数据结构类型&#xff0c;它们分别是&#xff1a;string&#xff08;字符串&#xff09;、list&#xff08;列表&#xff09;、hash&#xff08;哈希&#xff09;、set&#xff08;集合&#xff09;、zset&#xf…

文件批量改名:大量文件重命名,不再烦恼

在日常生活和工作中&#xff0c;我们常常会遇到大量的文件需要重命名的情况。例如&#xff0c;整理照片、整理网络下载图片、整理音频和视频文件等等。如果一个一个地手动修改文件名&#xff0c;不仅费时费力&#xff0c;而且容易出错。那么&#xff0c;如何快速高效地批量修改…

Shell 解释器,帮你解析一条Shell语句到底是什么意思

使用Linux系统的朋友&#xff0c;几乎每天都在使用Shell命令&#xff0c;比如 # 新建一个.sh脚本&#xff1a; vim 脚本名.sh # 运行一个.sh脚本&#xff1a; ./脚本名.sh ​​​​​​​Shell语句是一种用于与计算机操作系统交互的文本命令。Shell是计算机操作系统的命令行…

如何在逍遥模拟器上加载Magisk模块

本机环境&#xff1a;win7 64位&#xff0c;Python3.8.10&#xff0c;逍遥模拟器版本9.0.6&#xff0c;安卓版本9&#xff08;手机里的设置-系统-关于平板电脑-Android版本&#xff09;。 已经安装了Magsik&#xff0c;现在需要加载一个新模块。 一、电脑上下载需要安装的模块…

15.(开发工具篇vscode)vscode保存操作后,代码发生变化

问题描述&#xff1a;:visible.sync会自动变成v-model:visible 解决方案&#xff1a; 一&#xff1a;打开设置 二&#xff1a;关键字&#xff08;保存&#xff09;&#xff0c;打开settings.json 三&#xff1a;修改配置项source.fixAll.eslint为false

漏洞复现--Juniper Networks Junos OS EX远程命令执行漏洞(CVE-2023-36845)

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

学习记录——StyleGAN2+SA-UNet

SA-UNet for Retinal Vessel improvment using StyleGAN2 作者提出了一种改进视网膜图像分割的方法,通过创建图像及其相应的分割地图来实现。作者的解决方案包括使用DRIVE数据集1对StylGAN2进行训练,并使用目前在分割DRIVE图像方面取得最先进结果的SA-UNet模型对新合成的图像…

软件测试面试常常遇到的6大“套路”!

前言 面试中&#xff0c;如何回答HR提出的问题很大程度上决定了面试能不能成功。 下面是软件测试人员在面试过程中经常被问到的6个问题&#xff0c;告诉你怎么回答才不会被面试官套路.. 01、请你做一个自我介绍 误区&#xff1a; 一般人回答这个问题过于平常&#xff0c;只…

(2021|NIPS,VQ-VAE,精度瓶颈松弛,三明治层归一化,CapLoss)CogView:通过转换器掌握文本到图像的生成

CogView: Mastering Text-to-Image Generation via Transformers 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 0. 摘要 通用领域中的文本到图像生成长期以来一直是一个悬而未决的问题&#…