欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

我們提供的服務(wù)有:網(wǎng)站制作、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、昆明ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的昆明網(wǎng)站制作公司

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

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

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

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

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

首先我們要?jiǎng)?chuàng)建兩個(gè)插件:

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

這個(gè)插件能讓我們通過(guò)Axios發(fā)送帶token的請(qǐng)求。

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

這一個(gè)插件則是從Cookie中獲取token。

接下來(lái)你就能在一個(gè)“async fetch”方法中簡(jiǎn)單地使用它們:

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

網(wǎng)頁(yè)標(biāo)題:Nuxt.jsSSR與權(quán)限驗(yàn)證的實(shí)現(xiàn)
網(wǎng)頁(yè)鏈接:http://www.chinadenli.net/article16/gpsddg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄網(wǎng)站改版靜態(tài)網(wǎng)站小程序開(kāi)發(fā)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)