nuxt.js中間件實(shí)現(xiàn)攔截權(quán)限判斷的方法
最近在把vue的項(xiàng)目改成基于nuxt.js是 ssr渲染,需要進(jìn)行權(quán)限攔截判斷,網(wǎng)上查了不少資料。最終看官方手冊(cè)解決了,貼一下過(guò)程
項(xiàng)目環(huán)境
"element-ui":"^2.3.4",
"flyio":"^0.5.2",
"js-cookie":"^2.2.0",
"nuxt":"^1.4.0",
一:首先登錄頁(yè)面
在登錄頁(yè)面script中引入
import Cookie from 'js-cookie' //npm install js-cookie --save
在script里加上
data(){
return{
redirectURL:'/'
}
},
mounted() {
let rediretUrl = this.$route.query.ref;
if (rediretUrl){
this.redirectURL = rediretUrl
}
}
接著在methods里面編寫(xiě)一個(gè) submitLogin的方法
submitLogin(ev) {
var _this = this;
this.$refs.ruleForm2.validate((valid) => {
if (valid) {
_this.logining = true
var sendData = {
username: _this.ruleForm2.account,
password: _this.ruleForm2.pass,
is_remember: _this.isRemember
};
//登錄操作
_this.$https.post('login/index', sendData).then(res => {
if (res.status == 1) {
//將服務(wù)端的token存入cookie當(dāng)中
Cookie.set('token', res.data.token)
//返回上一頁(yè)
_this.$router.push(_this.redirectURL)
}else{
_this.$message.warning(res.msg)
}
})
} else {
return false;
}
});
},
二:nuxt中間件middleware編寫(xiě)權(quán)限攔截
新建一個(gè)userAuth.js,目錄結(jié)構(gòu)如下
代碼如下
import utils from '~/utils/utils'
export default function ({route, req, res, redirect}) {
let isClient = process.client;
let isServer = process.server;
let redirectURL = '/login';
var token, path
//在服務(wù)端
if (isServer) {
let cookies = utils.getcookiesInServer(req)
path = req.originalUrl;
token = cookies.token ? cookies.token : ''
}
//在客戶端判讀是否需要登陸
if (isClient) {
token = utils.getcookiesInClient('token')
path = route.path;
}
if (path) {
redirectURL = '/login?ref=' + encodeURIComponent(path)
}
//需要進(jìn)行權(quán)限判斷的頁(yè)面開(kāi)頭
if (!token) {
redirect(redirectURL)
}
}
utils.js里面的方法
import Cookie from 'js-cookie'
export default {
//獲取服務(wù)端cookie
getcookiesInServer:function (req) {
let service_cookie = {};
req && req.headers.cookie && req.headers.cookie.split(';').forEach(function (val) {
let parts = val.split('=');
service_cookie[parts[0].trim()] = (parts[1] || '').trim();
});
return service_cookie;
},
//獲取客戶端cookie
getcookiesInClient:function (key) {
return Cookie.get(key) ? Cookie.get(key) : ''
}
}
到這里,我們的中間件,權(quán)限判斷依據(jù)完成了
三:運(yùn)用到項(xiàng)目中
在項(xiàng)目中。例如,用戶信息設(shè)置頁(yè)面,需要進(jìn)行是否登錄判斷
pages/user/setting.vue
我們?cè)陧?yè)面中運(yùn)用剛剛編寫(xiě)的userAuth中間。
middleware: 'userAuth',
現(xiàn)在
setting頁(yè)面就有權(quán)限判斷了
基于nuxt.js渲染的 ssr 網(wǎng)站可以愉快的運(yùn)行起來(lái)了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iView UI FORM 動(dòng)態(tài)添加表單項(xiàng)校驗(yàn)規(guī)則寫(xiě)法實(shí)例
這篇文章主要為大家介紹了iView UI FORM 動(dòng)態(tài)添加表單項(xiàng)校驗(yàn)規(guī)則寫(xiě)法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
vue+element-ui前端使用print-js實(shí)現(xiàn)打印功能(可自定義樣式)
Print.js主要是為了幫助我們直接在瀏覽器中開(kāi)發(fā)打印功能,下面這篇文章主要給大家介紹了關(guān)于vue+element-ui前端使用print-js實(shí)現(xiàn)打印功能(可自定義樣式)的相關(guān)資料,需要的朋友可以參考下2022-11-11
如何使用vue實(shí)現(xiàn)前端導(dǎo)入excel數(shù)據(jù)
在實(shí)際開(kāi)發(fā)中導(dǎo)入功能是非常常見(jiàn)的,導(dǎo)入功能前端并不難,下面這篇文章主要給大家介紹了關(guān)于如何使用vue實(shí)現(xiàn)前端導(dǎo)入excel數(shù)據(jù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
vue中通過(guò)使用$attrs實(shí)現(xiàn)組件之間的數(shù)據(jù)傳遞功能
組件之間傳遞數(shù)據(jù)的方式有很多種,之所以有這么多種方式,是為了滿足在不同場(chǎng)景不同條件下的使用。這篇文章主要介紹了vue中通過(guò)使用$attrs實(shí)現(xiàn)組件之間的數(shù)據(jù)傳遞,需要的朋友可以參考下2019-09-09
100行代碼理解和分析vue2.0響應(yīng)式架構(gòu)
通過(guò)100行代碼幫助大家理解和分析vue2.0響應(yīng)式架構(gòu)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03

