怎样实现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,就进行微信授权。这种做法开发过程比较方便,但是会在用户未登录情况下发送了一些不必要的请求给后端,感觉不太好。

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

推荐阅读:

vue项目打包传送至服务器

JS实现简单购物车功能代码分析

以上就是怎样实现Vue微信项目按需授权登录的详细内容,更多请关注【创想鸟】其它相关文章!

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

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

(0)
上一篇 2025年3月8日 08:21:25
下一篇 2025年2月25日 11:34:05

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

相关推荐

  • 用AJAX实现页面登陆以及注册用户名验证的简单实例

    下面我就为大家带来一篇用ajax实现页面登陆以及注册用户名验证的简单实例。现在就分享给大家,也给大家做个参考。 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交…

    编程技术 2025年3月8日
    200
  • 前端项目中初始化项目结构

    这次给大家带来前端项目中初始化项目结构,前端项目中初始化项目结构的注意事项有哪些,下面就是实战案例,一起来看一下。 我平时工作会做移动端H5多一些,所以我通过webpack搭建了自己的前端工程(x-build),主要是编译stylus、ja…

    编程技术 2025年3月8日
    200
  • 怎样搭建vue2.0+boostrap项目

    这次给大家带来怎样搭建vue2.0+boostrap项目,搭建vue2.0+boostrap项目的注意事项有哪些,下面就是实战案例,一起来看一下。 一、Vue CLI初始化Vue项目 全局安装vue cli npm install &#82…

    2025年3月8日
    200
  • 怎么实现微信小程序登录鉴权

    这次给大家带来怎么实现微信小程序登录鉴权,实现微信小程序登录鉴权的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 为了方便小程序应用使用微信登录态进行授权登录,微信小程序提供了登录授权的开放接口。乍一看文档,感觉文档上讲的非常有道理…

    2025年3月8日
    200
  • 利用Vue.js做出可配置登录表单

    这次给大家带来利用Vue.js做出可配置登录表单,利用Vue.js做出可配置登录表单的注意事项有哪些,下面就是实战案例,一起来看一下。 业务场景 在之前,项目只支持手机号+密码登录,前端是直接把表单写死的,后来有客户希望能支持验证码登录,有…

    2025年3月8日
    200
  • 如何使用Vue项目内引入icon图标

    这次给大家带来如何使用Vue项目内引入icon图标,使用Vue项目内引入icon图标的注意事项有哪些,下面就是实战案例,一起来看一下。 1.下载icon图标,推荐icomoon网站,里面有大量的矢量图标,也可以自定义,当然你也可以去阿里巴巴…

    2025年3月8日 编程技术
    200
  • 怎样正确使用vuex项目结构目录与配置

    这次给大家带来怎样正确使用vuex项目结构目录与配置,使用vuex项目结构目录与配置的注意事项有哪些,下面就是实战案例,一起来看一下。 首先先正经的来一段官网的”忠告”: vuex需要遵守的规则: 一、应用层级的状态…

    2025年3月8日
    200
  • 怎样进行mpvue小程序项目搭建

    这次给大家带来怎样进行mpvue小程序项目搭建,进行mpvue小程序项目搭建的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 mpvue 是美团开源的一套语法与vue.js一致的、快速开发小程序的前端框架,按官网说可以达到小程序与H…

    2025年3月8日
    200
  • 怎样使用Vue+Jwt+SpringBoot+Ldap完成登录认证

    这次给大家带来怎样使用Vue+Jwt+SpringBoot+Ldap完成登录认证,使用Vue+Jwt+SpringBoot+Ldap完成登录认证的注意事项有哪些,下面就是实战案例,一起来看一下。 之前传统登录认证的方法基本是由服务器端提供一…

    2025年3月8日 编程技术
    200
  • 怎样使vue项目刷新页面

    这次给大家带来怎样使vue项目刷新页面,使vue项目刷新页面的注意事项有哪些,下面就是实战案例,一起来看一下。 1.场景 在处理列表时,常常有删除一条数据或者新增数据之后需要重新刷新当前页面的需求。 2.遇到的问题 1. 用vue-rout…

    2025年3月8日
    200

发表回复

登录后才能评论