最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

Nuxt.js SSR與權(quán)限驗(yàn)證的實(shí)現(xiàn)

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:03:31
文檔

Nuxt.js SSR與權(quán)限驗(yàn)證的實(shí)現(xiàn)

Nuxt.js SSR與權(quán)限驗(yàn)證的實(shí)現(xiàn):Nuxt.js是一個建立在Vue.js基礎(chǔ)上的服務(wù)端渲染框架。它非常易于上手并且可以讓你在幾分鐘內(nèi)構(gòu)建你的應(yīng)用。 服務(wù)端渲染是一個解決所有SPA的SEO問題的偉大解決方案,但不幸的是它帶來了另一個問題:權(quán)限驗(yàn)證成了另一個項(xiàng)目管理中的痛點(diǎn)。 Nuxt.js官網(wǎng)提
推薦度:
導(dǎo)讀Nuxt.js SSR與權(quán)限驗(yàn)證的實(shí)現(xiàn):Nuxt.js是一個建立在Vue.js基礎(chǔ)上的服務(wù)端渲染框架。它非常易于上手并且可以讓你在幾分鐘內(nèi)構(gòu)建你的應(yīng)用。 服務(wù)端渲染是一個解決所有SPA的SEO問題的偉大解決方案,但不幸的是它帶來了另一個問題:權(quán)限驗(yàn)證成了另一個項(xiàng)目管理中的痛點(diǎn)。 Nuxt.js官網(wǎng)提

Nuxt.js是一個建立在Vue.js基礎(chǔ)上的服務(wù)端渲染框架。它非常易于上手并且可以讓你在幾分鐘內(nèi)構(gòu)建你的應(yīng)用。

服務(wù)端渲染是一個解決所有SPA的SEO問題的偉大解決方案,但不幸的是它帶來了另一個問題:權(quán)限驗(yàn)證成了另一個項(xiàng)目管理中的痛點(diǎn)。

Nuxt.js官網(wǎng)提供了一個稱為“路由鑒權(quán)”的示例(https://nuxtjs.org/examples/auth-routes)。它展示了如何通過一個中間件來限定一個頁面是否可訪問,但是這個檢查是在客戶端的進(jìn)行的并且服務(wù)端渲染出的內(nèi)容無論是否進(jìn)行權(quán)限驗(yàn)證都是一樣的。

那么我們?nèi)绾卧诜?wù)端渲染一個特定的內(nèi)容呢?這里有一個解決方案!

服務(wù)端渲染通常是這樣進(jìn)行的:客戶端發(fā)起一個請求,例如訪問“/articles/page/1”,服務(wù)端渲染框架訪問一個返回JSON數(shù)據(jù)的API然后生成頁面并將其發(fā)送至客戶端。

我們在這個過程中缺少的是指定一個token或者其他什么來進(jìn)行權(quán)限驗(yàn)證的過程。或許一個包含權(quán)限token的Cookie是一個好辦法,它能在頭部被讀取,因此我們的服務(wù)端渲染框架能傳遞它或是把它發(fā)送到API。

首先我們要創(chuàng)建兩個插件:

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發(fā)送帶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) {}
 }
 }
}

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Nuxt.js SSR與權(quán)限驗(yàn)證的實(shí)現(xiàn)

Nuxt.js SSR與權(quán)限驗(yàn)證的實(shí)現(xiàn):Nuxt.js是一個建立在Vue.js基礎(chǔ)上的服務(wù)端渲染框架。它非常易于上手并且可以讓你在幾分鐘內(nèi)構(gòu)建你的應(yīng)用。 服務(wù)端渲染是一個解決所有SPA的SEO問題的偉大解決方案,但不幸的是它帶來了另一個問題:權(quán)限驗(yàn)證成了另一個項(xiàng)目管理中的痛點(diǎn)。 Nuxt.js官網(wǎng)提
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top