美文网首页我爱编程
Nuxt.js SSR与权限验证

Nuxt.js SSR与权限验证

作者: DelphinWU | 来源:发表于2018-05-23 14:44 被阅读1959次

原文Nuxt.js — SSR & Authentication

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) {}
    }
  }
}

相关文章

  • Nuxt.js SSR与权限验证

    原文Nuxt.js — SSR & Authentication Nuxt.js是一个建立在Vue.js基础上的服...

  • vue服务器端渲染

    资料 vue-ssr nuxt.js nuxt github

  • EGG-NUXT-SSR

    egg-nuxt-ssr 框架块是由egg(nodejs)框架+nuxt.js整合而成,旨在快速开发ssr服务。框...

  • nuxt.js简介

    学习nuxt.js之前,需要了解SSR,SSR即服务端渲染,关于前后端渲染之争,推荐看这篇文章: https://...

  • Linux 配置代理

    软件要求 SSR Proxychains4 准备工作 SSR 获取ssr脚本 赋予ssr脚本可执行权限 将ssr放...

  • 本期小结(二)

    vue★ vue-ssr服务端渲染简单例子 vue-ssr服务端渲染框架Nuxt.js vue2.0仿饿了么web...

  • Nuxt.js开启SSR渲染的教程详解

    第一节:nuxt.js相关概述 nuxt.js简单的说是Vue.js的通用框架,最常用的就是用来作SSR(服务器端...

  • vue项目中使用 prerender-spa-plugin进行预

    最近在研究服务端渲染(SSR) nuxt.js框架[https://zh.nuxtjs.org/docs/2.x/...

  • SSR实战:Nuxt.js

    基于vue.js的通用框架nuxt安装 npx create-nuxt-app <项目名>选项image.png运...

  • vue 服务端渲染 nuxt.js

    Nuxt.js是Vue进行SSR的一个优选开源项目,可免去繁琐的Webpack、nodejs后台服务配置等操作,方...

网友评论

    本文标题:Nuxt.js SSR与权限验证

    本文链接:https://www.haomeiwen.com/subject/qgerjftx.html