Nuxt.js SSR与权限验证的实现

 更新时间:2018年11月21日 10:36:22   作者:DelphinWU  
这篇文章主要介绍了Nuxt.js SSR与权限验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Nuxt.js是一个建立在Vue.js基础上的服务端渲染框架。它非常易于上手并且可以让你在几分钟内构建你的应用。

服务端渲染是一个解决所有SPA的SEO问题的伟大解决方案,但不幸的是它带来了另一个问题:权限验证成了另一个项目管理中的痛点。

Nuxt.js官网提供了一个称为“路由鉴权”的示例(https://nuxtjs.org/examples/auth-routes)。它展示了如何通过一个中间件来限定一个页面是否可访问,但是这个检查是在客户端的进行的并且服务端渲染出的内容无论是否进行权限验证都是一样的。

那么我们如何在服务端渲染一个特定的内容呢?这里有一个解决方案!

服务端渲染通常是这样进行的:客户端发起一个请求,例如访问“/articles/page/1”,服务端渲染框架访问一个返回JSON数据的API然后生成页面并将其发送至客户端。

我们在这个过程中缺少的是指定一个token或者其他什么来进行权限验证的过程。或许一个包含权限token的Cookie是一个好办法,它能在头部被读取,因此我们的服务端渲染框架能传递它或是把它发送到API。

首先我们要创建两个插件:

import axios from 'axios'

let options = {};
if (process.SERVER_BUILD) {
 options.baseURL = `http://api:3030`
}

let ax = {
 options,
 create: (token) => {
 options.headers = {
  Authorization: token
 }
 return axios.create(ax.options)
 }
}

 export default ax

这个插件能让我们通过Axios发送带token的请求。

const getCookie = function(cname, req) {
 let name = cname + "="
 let decodedCookie
 if (typeof window === 'undefined') decodedCookie = decodeURIComponent(req.headers.cookie)
 else decodedCookie = decodeURIComponent(document.cookie)
 let ca = decodedCookie.split(';')
 for(let i = 0; i <ca.length; i++) {
  let c = ca[i]
  while (c.charAt(0) == ' ') {
   c = c.substring(1)
  }
  if (c.indexOf(name) == 0) {
   return c.substring(name.length, c.length)
  }
 }
 return ""
}
export default getCookie

这一个插件则是从Cookie中获取token。

接下来你就能在一个“async fetch”方法中简单地使用它们:

import axios from '~plugins/axios'
import getCookie from '~plugins/getCookie'
export default {
 async fetch ({ store, isServer, req, redirect }) {
  if(isServer) {
   const ax = axios.create(getCookie('token', req))
   try {
    let { data } = await ax.get('/populate')
    if(data.store && data.store.user) store.commit('user/setData', data.store.user)
    else redirect('/login')
   } catch(e) {}
  }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Vue实现弹出框点击空白页弹框消失效果

    Vue实现弹出框点击空白页弹框消失效果

    这篇文章主要介绍了VUE实现弹出框点击空白页弹框消失,实现方法可以在Vue中实现弹出框然后通过点击空白页面来让弹窗隐藏,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • node.js开发辅助工具nodemon安装与配置详解

    node.js开发辅助工具nodemon安装与配置详解

    node.js代码修改后,需要重新启动 Express 应用,所做的修改才能生效。若之后的每次代码修改都要重复这样的操作,势必会影响开发效率,本文将详细介绍Nodemon,它会监测项目中的所有文件,一旦发现文件有改动,Nodemon 会自动重启应用
    2020-02-02
  • Vue如何使用本地JSON文件

    Vue如何使用本地JSON文件

    这篇文章主要介绍了Vue如何使用本地JSON文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 在vue中使用防抖和节流,防止重复点击或重复上拉加载实例

    在vue中使用防抖和节流,防止重复点击或重复上拉加载实例

    今天小编就为大家分享一篇在vue中使用防抖和节流,防止重复点击或重复上拉加载实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 详解vantUI框架在vue项目中的应用踩坑

    详解vantUI框架在vue项目中的应用踩坑

    这篇文章主要介绍了详解vantUI框架在vue项目中的应用踩坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • vue可视化表单设计器自定义组件使用方法

    vue可视化表单设计器自定义组件使用方法

    Vue前端开发中表单组件是排在前三的高频使用的组件,下面这篇文章主要给大家介绍了关于vue可视化表单设计器自定义组件使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Vue头像处理方案小结

    Vue头像处理方案小结

    这篇文章主要介绍了Vue头像处理方案,实现思路主要是通过获取后台返回头像url,判断图片宽度,高度。具体实例代码大家参考下本文
    2018-07-07
  • vue.js实现简易折叠面板

    vue.js实现简易折叠面板

    这篇文章主要为大家详细介绍了JavaScript实现简易折叠面板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • vue项目首次打开时加载速度很慢的优化过程

    vue项目首次打开时加载速度很慢的优化过程

    这篇文章主要介绍了vue项目首次打开时加载速度很慢的优化过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue+element实现锚点链接方式

    vue+element实现锚点链接方式

    这篇文章主要介绍了vue+element实现锚点链接方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07

最新评论