免登/钉钉免登/钉钉免密登录

需求:
1.当用户从钉钉点击按钮,直接跳转到我们的后管项目.
2.当用户为首次登录,需要通过短信验证码进行绑定,下次可直接免登直接进入系统

直接上代码吧

因为正常是有一个普通的登录页面的
所以这次的免登录新起了一个页面,将钉钉上的按钮,直接绑定了这个url
例如: https://www.XXXX.com/user/auto-login

页面处理方式

首先是html页面,因为进入项目,首先加载html,所以把获取钉钉ID的请求,写在了html内

    $(function () {
      // alert('钉钉初始化开始');
      //钉钉sdk 初始化
      // dd.ready参数为回调函数,在环境准备就绪时触发,jsapi的调用需要保证在该回调函数触发后调用,否则无效。
      dd.ready(function () {
        //获取当前网页的url
        var currentUrl = document.location.toString();
        $('#url').append(currentUrl);

        // 解析url中包含的corpId
        var corpId = currentUrl.split('corpId=')[1];
        $('#corpId').append(corpId);


        //使用SDK 获取免登授权码
        dd.runtime.permission.requestAuthCode({
          corpId: corpId,
          onSuccess: function (result) {
            var code = result.code;
            $('#code').append(code);
            $.ajax({
              type: 'POST',
              url: 'https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,
              contentType: 'application/json;charset=utf-8',
              data: JSON.stringify({ code: code, appId: XXXXX, corpId: corpId }),
              dataType: 'json',
              success: function (response) {


			// 通过钉钉返回的unionid跳转到是否符合免登的鉴权页面
                if(response.data.unionid){
                  window.location.href = `/user/logining?unionid=${response.data.unionid}`;
                }
              },
              
              error: function (response) {
                // alert('提交失败' + JSON.stringify(response));
                $('#myresponse').append(JSON.stringify(response));
              },
            });
          },
        });
      });
    });
AutoLogin.jsx
// 页面加载时候 取做判断
  useEffect(() => {
   // 通过跳转过来的URL来截图钉钉ID,每个人的钉钉ID独一无二,通过钉钉ID来进行绑定
    const ddId = window.location.search?.split('unionid=')[1];
    if (ddId) {
    // 发送请求 判断是否符合免登直接进入系统
      dispatch({
        type: 'login/autoLogin',
        payload: { mcid: ddId },
      }).then((v) => {
        // 符合免登录  直接进入系统
        if (v?.success === true) {
        // 提示信息,进入系统,获取用户权限及菜单等 (鉴权及菜单获取删掉了,都是dispatch)
          message.success('🎉 🎉 🎉  登录成功!');
          setTimeout(
            () =>
              dispatch({
                type: 'login/getUserMenu',
              }).then((value) => value?.code === 200 && history.push(getFirstPath(value?.data))),
            200,
          );
          // 后端判断不符合免登录 携带钉钉ID  跳转到登录界面
        } else {
        // 通过 location跳转到普通登录,携带参数 钉钉ID, 准备进行绑定工作.
          window.location.href = `/user/login?unionid=${ddId}`;
          // message.error('您还没有绑定,请先进行登录绑定!');
        }
      });
    }
  }, []);

普通登录页面去做一个绑定

// 当点击from表单的登录 去做判断, 用户是普通登录还是绑定
  const onFinish = (values) => {
  // 尝试获取钉钉ID
    const ddid = window.location.search?.split('unionid=')[1]?.split('&')[0];
    const { code } = values;
    // 判断是否有钉钉ID及验证码的填写
    if (ddid && values) {
    // 如果有钉钉ID 则 调用绑定免登录的接口
      dispatch({
        type: 'login/autoLogin',
        payload: { phone: values.phone, code, mcid: ddid },
      }).then((v) => {
        if (v?.code === 200) {
          message.success('🎉 🎉 🎉  绑定成功!');
        } else {
          message.error(v.message);
        }
      });
	// 如果没有钉钉ID 则调用以前的登录接口
    } else {
      dispatch({
        type: loginUrl,
        payload: { phone, code },
      }).then((v) => {
        if (v?.code === 200) {
          message.success('🎉 🎉 🎉  登录成功!');
        } else {
          message.error(v.message);
        }
      });
    }
  };
要在Vue中实现钉钉免密登录获取用户信息,你可以按照以下步骤进行操作: 1. 引用中的代码示例,首先在Vue组件中引入钉钉的JSAPI库,并定义一个函数`dingding_no_login`来处理钉钉免登录的逻辑。 2. 使用`dd.ready`方法来确保钉钉环境准备就绪后,调用`dd.runtime.permission.requestAuthCode`方法获取免登授权码。在`onSuccess`回调中,可以通过`info.code`获取到免登授权码。 3. 将免登授权码发送给后端接口进行验证,并获取用户信息。可以使用`await`关键字来等待后端接口返回结果。 4. 在获取到用户信息后,可以进行相应的跳转或保存用户信息的操作。 以下是一个示例代码,展示了如何在Vue中实现钉钉免密登录获取用户信息: ```javascript import * as dd from 'dingtalk-jsapi' export default { methods: { async dingding_no_login() { if (dd.env.platform != 'notInDingTalk') { dd.ready(async () => { dd.runtime.permission.requestAuthCode({ corpId: "企业id", onSuccess: async (info) => { const res = await dingdingNoLogin({ code: info.code }) // 进行跳转或保存token的操作 } }); }); } } }, mounted() { this.dingding_no_login(); } } ``` 注意替换代码中的"企业id"为你的实际企业id。同时,你需要根据实际需求进行相应的跳转或保存用户信息的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [前端vue 钉钉内部使用公司内部系统免登录 微应用免登录](https://blog.csdn.net/weixin_64064327/article/details/125711817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [钉钉 基于vue开发h5微应用,免登录获取用户信息](https://blog.csdn.net/weixin_40079913/article/details/120198601)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值