vue钉钉授权第三方网页登录,扫码登录,vue hash模式下回调地址错误踩坑

这篇具有很好参考价值的文章主要介绍了vue钉钉授权第三方网页登录,扫码登录,vue hash模式下回调地址错误踩坑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

vue接入钉钉登录及遇到的问题


一、引入钉钉扫码登录JSSDK

在index.html中引入

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

二、使用步骤

1.通过打开授权页面的方式

钉钉的配置使用后端配置好的,通过接口返回,参数主要是重定向的url地址(需要encode),和client_id。
代码如下:

// 跳转链接钉钉操作
    ddHrefLogin() {
      const { agentId, url } = this.ddConfig;
      const cloneUrl = encodeURIComponent(url);
      const hrefUrl = `https://login.dingtalk.com/oauth2/auth?redirect_uri=${cloneUrl}&response_type=code&client_id=${agentId}&scope=openid&state=dddd&prompt=consent`;
      window.open(hrefUrl, '_self');
    },

扫码完成之后,页面会重定向到配置的地址上,附带authCode就是需要这个参数
在created生命周期中使用自己项目的登录接口

// 获取到钉钉返回的code就请求登录接口
    if (this.$route.query.authCode) {
      this.handleCodeLogin(this.$route.query.authCode);
    }

2.通过扫描二维码的方式登录

代码如下:

ddLoginInit() {
      const _this = this;
      window.DTFrameLogin(
        {
          id: "qr-code-scan", // 装钉钉二维码的盒子
          width: 300,
          height: 300,
        },
        {
          redirect_uri: encodeURIComponent(_this.ddConfig.url),
          client_id: _this.ddConfig.agentId,
          scope: "openid",
          response_type: "code",
          prompt: "consent",
          state: "ddd",
        },
        (loginResult) => {
          const { redirectUrl, authCode, state } = loginResult;
          console.log("loginResult", loginResult);
          console.log("_this.ddConfig", _this.ddConfig);
          // 这里可以直接进行重定向
          window.location.href = redirectUrl;
          // 也可以在不跳转页面的情况下,使用code进行授权
          console.log(authCode);
        },
        (errorMsg) => {
          // 这里一般需要展示登录失败的具体原因
          alert(`Login Error: ${errorMsg}`);
          console.log("_this.ddConfig", _this.ddConfig);
        }
      );
    },

取到authCode之后做自己的操作

三、踩坑

vue的hash模式,钉钉重定向回来的地址有误,路径错误无法获取到$route.query.authCode

期望得到的回调地址:

https://xxxx/#/login?authCode=faf0517xxxxxxxxxxxxxxx96373&state=dddd

实际在hash模式下得到的回调地址:

https://xxxx/?authCode=faf0517xxxxxxxxxxxxxxx96373&state=dddd#/login

四、解决方法

重新组装回调之后的路径

created() {
    //code是登录所需最终参数
    let url = new URL(window.document.URL); // 获取路径
    const code = this.$utils.string.getUrlKeyVal("authCode"); // 通过路径获取authCode
    if (url.search && code) { // 钉钉重定向地址错误 重新组装路径
      window.open(`${url.origin}${url.hash}&authCode=${code}`, '_self')
    }
    // 获取到钉钉返回的code就请求登录接口
    if (this.$route.query.authCode) {
      this.handleCodeLogin(this.$route.query.authCode);
    }
  },

获取路径中对应key的值方法

const getUrlKeyVal = (key) => {
  var value = "";
  ///获取当前页面的URL
  var sURL = window.document.URL;
  ///URL中是否包含查询字符串
  if (sURL.indexOf("?") > 0) {
    //分解URL,第二的元素为完整的查询字符串
    //即arrayParams[1]的值为【id=1&action=2】
    var arrayParams = sURL.split("?");
    //分解查询字符串
    //arrayURLParams[0]的值为【id=1 】
    //arrayURLParams[2]的值为【action=add】
    var arrayURLParams = arrayParams[1].split("&");
    //遍历分解后的键值对
    for (var i = 0; i < arrayURLParams.length; i++) {
      //分解一个键值对
      var sParam = arrayURLParams[i].split("=");
      if (sParam[0] == key && sParam[1] != "") {
        //找到匹配的的键,且值不为空

        value = sParam[1];

        break;
      }
    }
  }
  return value;
},

总结

以上就是vue钉钉登录的内容,主要就是vue hash模式下的坑,导致回调地址错误。文章来源地址https://www.toymoban.com/news/detail-643074.html

到了这里,关于vue钉钉授权第三方网页登录,扫码登录,vue hash模式下回调地址错误踩坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA 微信公众号授权给开放平台(第三方平台)开发流程及第三方平台代公众号实现业务

    一 、开放平台账户注册及开发配置请参考我之前的文章 开发前准备工作。 二、授权流程 官方文档细节比较多 我说的比较直白 (1)首先 启动票据推送服务 (2)接收消息→解密→验证并获取票据→保存票据 component_verify_ticket (3)获取第三方平台调用凭证 component_access_tok

    2024年03月15日
    浏览(47)
  • 扩展ABP的Webhook功能,推送数据到第三方接口(企业微信群、钉钉群等)

    ASP.NET Boilerplate(以下简称ABP)在v5.2(2020-02-18)版本中发布了Webhook功能,详细说明,请参见:官方帮助链接; ASP.NET ZERO(以下简称ZERO)在v8.2.0(2020-02-20)版本中发布了Webhook功能; 我们系统是在2021年4月完成了对Webhook功能的改造:内部接口(用户自行设定接口地址的)、第

    2024年02月09日
    浏览(27)
  • Gitee第三方登录

    写这篇文章时,参考了一位大佬的文章,算是把大佬文章里一些不详细的部分补充完整了,但是核心的代码没有什么改动,只是抛弃掉了那个重定向的工具类,以下是大佬文章的链接:http://t.csdn.cn/0L7T4 1、登录gitee 官网:https://gitee.com/ 2、注册或登录账号 3、进入 设置》第三

    2024年02月12日
    浏览(37)
  • Springboot整合第三方登录

    Springboot整合第三方登录 为什么采用第三方登录 ​ 采用第三方登录可以避免重新注册账号的繁琐,也不需要再为密码和昵称发愁,而第三方登录有一个比较好用的包,里面整合了多种第三方登录,开箱即用,非常方便。就是JustAuth,网址https://www.justauth.cn/。 整合第三方登录

    2024年02月09日
    浏览(29)
  • 微信小程序第三方登录

    目录 小程序第三方登录操作流程如下: 1.第一步 2.第二步 2.第三步 4.第四步 5.第五步 注意:如果第一步没打印出来,看看微信模拟器上的Id有没有更改,或则去源码试图,weixinId更改 进入uniapp官网=Api=第三方服务=登录=微信小程序登录 创建一个触发事件,获取头像和名称 调用

    2024年02月13日
    浏览(52)
  • PHP Twitter 推特 第三方登录

    twitter登录文档 开发者平台 申请成为开发流程按引导操作就可以了, 但是要注意信息填写要真实完善的信息, 否则容易被拒绝(被拒绝可能不能二次申请, 之前不能, 现在不知道能不能) 目前推特一个号只能开通一个免费应用, 可付费开通多个 设置基础信息 User authentication setting

    2024年04月16日
    浏览(27)
  • 若依 关于 springsecurity 不用密码登录,自定义第三方登录、免登录

    用的是若依的前后端分离的版本,项目接口是给小程序用 openid 直接免登录 找到登录方法 他这是根据用户名和密码进行比对、由于密码没办法转换成明文 只能改成如下方法免登录

    2024年02月07日
    浏览(38)
  • 使用开源项目JustAuth完成第三方登录

    JustAuth项目源码地址:https://github.com/justauth/JustAuth JustAuth文档地址:https://justauth.wiki/guide/quickstart/oauth/ 此demo的项目地址:xfeng520/JustAuthDemo (gitee.com) 开发者 指使用 JustAuth 的开发者 第三方 指开发者对接的第三方网站,比如:QQ平台、微信平台、微博平台 用户 指最终服务的真实

    2023年04月22日
    浏览(71)
  • uniapp 对接谷歌第三方登录

    1.登录谷歌开发者后台 https://console.developers.google.com/ 2.添加凭证 3.拿到客户端id后,项目中配置google登录:  示例代码:

    2024年04月29日
    浏览(34)
  • 前端使用firebase配置第三方登录介绍(谷歌登录,facebook登录等)

    点此处去 firebase 官网 点此处去 web端的谷歌登录文档 点此处去 facebook开发者官网链接 首先注册一个账号登录firebase(可以使用谷歌账号登录) 然后创建项目(走默认配置就行了) 添加应用(走默认配置),如图所示,本文介绍web应用。 应用添加完毕后走项目设置-如下图(

    2024年04月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包