Vue授权登录实现方法

这次给大家带来Vue授权登录实现方法,Vue授权登录的注意事项有哪些,下面就是实战案例,一起来看一下。

项目采用Vue作为开发框架,用户浏览页面时有两种情况:

一种是需要用户先登录之后才能继续浏览;

另一种是用户无需登录即可随意浏览。

在无需用户登录的页面中,可能包含需要用户信息的操作,此时就需要用户登录之后方能进行后续操作。因此,需要对授权登录策略进行区分。

思路

1.一般而言,我们为微信开发的H5页面,进入页面的时候就进行鉴权,要求用户登录之后才能继续浏览。但由于产品需求,这个项目我们需要对不同页面的鉴权策略进行划分,按照一般与特殊进行设计:

2.一般情况,用户进入页面第一时间要求用户授权登录,按照常规的微信授权登录流程,登录之后,用户继续浏览。

3.特殊情况,为无需用户登录的页面配置白名单,只要进入存在于白名单的路由,不进入检测用户登录状态的函数,直接渲染页面。

对于用户未登录状态下进行的需要用户信息的操作,按照我目前的理解,即使是基于微信的静默授权,页面也必须重新刷新,无法做到真正无感授权并且继续用户的操作。因此我选择在前端层面给用户更友好的提示,让用户了解授权过程,缺点是前一次操作仅仅是触发授权登陆,授权登录后,用户需要再次进行操作。

// routerRule.jsexport default function routerRule (router, whiteList = []) {  // other codes...  router.beforeEach( (to, from, next ) => {    // 因为授权登录涉及异步操作,因此使用promise,成功的回调中调用next函数    new Promise((resolve, rejects) => {      if ( whiteListRouter.indexOf(to.path) !== -1 ) {        resolve()        return       }      // 常规页面授权登录过程      if (hasToken()) {        // codes,获取用户信息并且跳转所需跳转的页面      } else {        // 判断用户是否已经进行微信授权        if (hasAuthed()) {          // 进行过微信授权之后,重定向回来的url中包含了微信的授权信息,可以将url上截取的参数发送到服务器,换取用户的token,随后进入上述有token时候的步骤          getWechatUserInfo().then(res => {            resolve()          })        } else {          // 用户尚未进行微信授权,则调用微信授权的方法,进行授权登录。          getWechatAuth()        }      }    }).then( res => {      next()    })  })  router.afterEach(( to, from ) => {    wxShare({ title: to.meta.title, desc: to.meta.shareDesc, link: to.meta.shareLink, logo: to.meta.shareLogo})   })}

登录后复制

本项目是在用户初次进行微信绑定时,就将用户的微信信息与本站的用户信息进行的绑定,因此在获取用户微信授权信息后,就可以获取到用户的token,从而获取用户在本站的其他用户信息。

在无需登录页面的进行需要权限的操作的处理

根据上面的逻辑,进入白名单之后,整个函数已经被return掉,不会进入下面的鉴权过程。但是如果是在此种页面上进行需要权限的操作,那么就需要触发授权登录流程,并且在授权之后,要一并获取用户信息。

// checkLogin.jsexport function checkLogin({ redirectUrl, wxAuthLoading, wxAuthLoaded, callback } = {}) {  if (getToken()) {    // ...    callback && callback()  } else {    // 提示用户正在授权中    wxAuthLoading && wxAuthLoading()    getWechatAuth( redirectUrl || window.location.href ).then( res => {      // 授权完毕,提示用户授权成功      wxAuthLoaded && wxAuthLoaded()    })  }}

登录后复制

同时,我们需要对路由白名单添加一些操作

// routerRule.jsexport default function routerRule (router, whiteList = []) {  // other codes...  router.beforeEach( (to, from, next ) => {    // 因为授权登录涉及异步操作,因此使用promise,成功的回调中调用next函数    new Promise((resolve, rejects) => {      if ( whiteListRouter.indexOf(to.path) !== -1 ) {        // 如果已经进行微信授权但是没有token值的,就调用以下函数获取token值        if ( !hasToken() && hasAuthed() ) {          getWechatUserInfo().then(res => {            resolve()          })        }        resolve()        return       }      // 常规页面授权登录过程      if (hasToken()) {        // codes,获取用户信息并且跳转所需跳转的页面      } else {        // 判断用户是否已经进行微信授权        if (hasAuthed()) {          // 进行过微信授权之后,重定向回来的url中包含了微信的授权信息,可以将url上截取的参数发送到服务器,换取用户的token,随后进入上述有token时候的步骤          getWechatUserInfo().then(res => {            resolve()          })        } else {          // 用户尚未进行微信授权,则调用微信授权的方法,进行授权登录。          getWechatAuth()        }      }    }).then( res => {      next()    })  })  // other codes...}

登录后复制

坑点以及不完善的地方

1.这个方案在用户授权之后,在路由跳转之前,一定要先获取用户信息,否则在url上的微信授权信息就会丢失,获取用户信息就会失败。

2.这个方案的缺点在于,需要开发者对在免登陆页面的所有需权限操作都加上checkLogin判断。由于这种需权限的操作一般都是发送异步请求,所以如果不考虑减少不必要的异步请求的情况下,可以统一在请求的方法上设置拦截器,判断后端返回的code,如果返回的是用户未登录的code,就进行微信授权。这种做法开发过程比较方便,但是会在用户未登录情况下发送了一些不必要的请求给后端,感觉不太好。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

PHP快速实现数组去重方法

JS callback回调函数使用案例详解

以上就是Vue授权登录实现方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2762347.html

(0)
上一篇 2025年3月8日 09:55:08
下一篇 2025年3月8日 09:55:14

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • node+async实现控制并发

    这次给大家带来node+async实现控制并发,node+async实现控制并发的注意事项有哪些,下面就是实战案例,一起来看一下。 目标 建立一个 lesson5 项目,在其中编写代码。 代码的入口是 app.js,当调用 node app…

    2025年3月8日
    200
  • JS操作DOM树遍历方法总结

    这次给大家带来JS操作DOM树遍历方法总结,JS操作DOM树遍历的注意事项有哪些,下面就是实战案例,一起来看一下。 本文实例讲述了JavaScript实现的DOM树遍历方法。分享给大家供大家参考,具体如下: 二叉 DOM 树的遍历 func…

    编程技术 2025年3月8日
    200
  • Vue数组变异实现详解

    这次给大家带来Vue数组变异实现详解,Vue数组变异实现的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 很多初使用Vue的同学会发现,在改变数组的值的时候,值确实是改变了,但是视图却无动于衷,果然是因为数组太高冷了吗? 查看官方文…

    2025年3月8日 编程技术
    200
  • JS同步、异步与延迟加载实现总结

    这次给大家带来JS同步、异步与延迟加载实现总结,JS同步、异步与延迟加载实现的注意事项有哪些,下面就是实战案例,一起来看一下。 一:同步加载 我们平时使用的最多的一种方式。 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止后续的解析,只…

    编程技术 2025年3月8日
    200
  • 动态引入js四种方法总结

    这次给大家带来动态引入js四种方法总结,动态引入js四种方法的注意事项有哪些,下面就是实战案例,一起来看一下。 index.html 登录后复制 test.js alert(“hello! I am test.js”); var str=”…

    编程技术 2025年3月8日
    200
  • Angular模版驱动表单方法详解

    这次给大家带来Angular模版驱动表单方法详解,Angular模版驱动表单的注意事项有哪些,下面就是实战案例,一起来看一下。 获取用户输入 Angular表单 登录 登录后复制 假如有以上简单表单,先不论优劣,有哪些方式可以获取到表单数据…

    2025年3月8日 编程技术
    200
  • JS百度搜索框效果功能实现案例详解

    这次给大家带来JS百度搜索框效果功能实现案例详解,JS百度搜索框效果功能实现的注意事项有哪些,下面就是实战案例,一起来看一下。 效果:   1.当进入界面时,自动调用方法,获取当前的时间,并且实时更新时间。   2.点击页面头部的换肤,自动…

    2025年3月8日
    200
  • Vue父子组件数据传递方法总结(附代码)

    这次给大家带来Vue父子组件数据传递方法总结(附代码),Vue父子组件数据传递方法总结的注意事项有哪些,下面就是实战案例,一起来看一下。 当我们在书写 vue 组件的时候,也许可能会用到数据传递;将父组件的数据传递给子组件,有时候也需要通过…

    2025年3月8日 编程技术
    200
  • JavaScript中继承的几种实现方式

    本篇文章将为你介绍javascript中继承的几种实现方式,希望在看完本篇文章后,各位对javascript的继承有一定的了解! JavaScript中继承的几种实现方式 继承 想要实现继承,首先就得有个父类(构造函数)来提供属性和方法。 …

    2025年3月8日
    200
  • vue中模态对话框组件实现步骤详解

    这次给大家带来vue中模态对话框组件实现步骤详解,vue中模态对话框组件实现的注意事项有哪些,下面就是实战案例,一起来看一下。 写在前面 对话框是很常用的组件 , 在很多地方都会用到,一般我们可以使用自带的alert来弹出对话框,但是假如是…

    2025年3月8日
    200

发表回复

登录后才能评论