vue-nuxt?登錄鑒權(quán)的實(shí)現(xiàn)
介紹
來自mentor的梳理,做個(gè)總結(jié)和記錄
鏈接
https://auth.nuxtjs.org/api/options/#cookie
開始
根據(jù)這個(gè)文檔描述,在使用@nuxt/auth 后,如果沒有顯示指定cookie: false, 則auth token 會(huì)被默認(rèn)存儲(chǔ)在 cookie 里 (前面localstorage 也是一樣)
所以在 login接口成功后,token 就會(huì)以 auth._token.{provider} 的形式存儲(chǔ)
之后接口在請(qǐng)求時(shí)從cookie里拿token并作為接口憑證 發(fā)送給服務(wù)端。
目錄結(jié)構(gòu)
nuxt-dist 是每次npm run dev 或者 npm run build 后 webpack生成的文件,這里面的代碼可以看做是我們最后實(shí)際調(diào)用的代碼 (也可以直接在這里修改和debug,但每次重新跑項(xiàng)目就會(huì)還原)。
nuxt/auth 有幾個(gè)schemes 方案,比如看這個(gè) nuxt-dist/auth/schemes/local.js
這里有幾個(gè)默認(rèn)選項(xiàng):
在我們寫的代碼里,是用 $auth.loginWith 調(diào)用的方式,而實(shí)際上,loginWith最終還是調(diào)用的是 login
那看下login, 還是在 nuxt-dist/auth/schemes/local.js里
nuxt-dist 是每次npm run dev 或者 npm run build 后 webpack生成的文件,這里面的代碼可以看做是我們最后實(shí)際調(diào)用的代碼 (也可以直接在這里修改和debug,但每次重新跑項(xiàng)目就會(huì)還原)。
nuxt/auth 有幾個(gè)schemes 方案,比如看這個(gè) nuxt-dist/auth/schemes/local.js
這里有幾個(gè)默認(rèn)選項(xiàng):
在我們寫的代碼里,是用 $auth.loginWith 調(diào)用的方式,而實(shí)際上,loginWith最終還是調(diào)用的是 login
那看下login, 還是在 nuxt-dist/auth/schemes/local.js里
方法里的this.name, 就是auth.strategy, 也就是 local, local1 那些, 并且在上面 loginWith 方法里的 setStrategy() 將 auth.strategy 信息存到本地。
成功后,tokenRequired 默認(rèn)為true, 調(diào)用了 this.$auth.setToken, 這個(gè)方法在auth/schemes/auth.js 里
這個(gè)方法里的
在這個(gè)方法里,_key 被組裝成了._token.local
這個(gè)方法在 auth/storage.js 里
最終這個(gè)方法調(diào)用了 setCookie 和 serLocalStorage 方法, 把token存在coookie 和 localstorage里
而在setCookie里,再次組裝,加上了cookir.prefix ,默認(rèn)是auth
最終經(jīng)過序列化后,存儲(chǔ)在cookie里。
后續(xù)axios則直接在cookir里拿,并隨請(qǐng)求發(fā)送。
整個(gè)登錄和鑒權(quán)邏輯基本就是這樣。
繼續(xù)往代碼中走
nuxt.config.js 中還可以配置多個(gè) auth: {strategies: {local
微信登錄,手機(jī)號(hào)登錄,賬號(hào)登陸…
autoFetch
https://auth.nuxtjs.org/schemes/local
Fetch User
uth 模塊不保存有關(guān)用戶的信息,因此需要有一種方法來獲取用戶的信息,例如頁面重新加載。這就是用戶端點(diǎn)的用途。默認(rèn)情況下,這也會(huì)在成功登錄后調(diào)用。
如果user.autoFetch為 true (默認(rèn)),則endpoints.user在成功登錄后立即發(fā)送請(qǐng)求 。該端點(diǎn)應(yīng)使用特定用戶的 JSON 信息進(jìn)行響應(yīng),該信息直接分配給user 屬性。
如果您希望直接從登錄會(huì)話返回用戶信息,請(qǐng)配置user.autoFetch為 false,從loginWith響應(yīng)中獲取用戶信息 ,并將其傳遞給setUser.
如果要完全禁用獲取用戶信息,請(qǐng)?jiān)O(shè)置endpoints.user: false. 這意味著永遠(yuǎn)不會(huì)調(diào)用用戶信息端點(diǎn),但也意味著前端對(duì)用戶一無所知;this.$auth.user將{}。
ps: 由于需要對(duì)接口進(jìn)行替換,user會(huì)自動(dòng)去查詢,造成的報(bào)錯(cuò)不利于開發(fā),可以通過注釋,一步一步向下開發(fā)。
user: { autoFetch: false, },
proxy配置
項(xiàng)目的后端接口基于后端低代碼平臺(tái)和java接口,接口開頭的名稱不一致,可以通過proxy來處理,也可以解決跨域問題。
axios: { // // baseURL:'' proxy: true, prefix: '/', // credentials: false, }, proxy: { '/biz': { target: 'http://xxlb/', pathRewrite: { '^/biz': '/biz/', changeOrigin: true // 表示是否跨域 } }, '/front': { target: 'http://xxlb/', pathRewrite: { '^/front': '/api/front', changeOrigin: true // 表示是否跨域 } },
請(qǐng)求攔截
axios: { // // baseURL:'' proxy: true, prefix: '/', // credentials: false, }, proxy: { '/biz': { target: 'http://xxlb/', pathRewrite: { '^/biz': '/biz/', changeOrigin: true // 表示是否跨域 } }, '/front': { target: 'http://xxlb/', pathRewrite: { '^/front': '/api/front', changeOrigin: true // 表示是否跨域 } },
處理不同前綴的接口
dev 用于本地dev環(huán)境,部署至服務(wù)器不能這么用。
你定義一個(gè)文件,比如叫 apiPrefix.js
這個(gè)文件里,你枚舉出所有不同的接口和他們前綴的對(duì)應(yīng)關(guān)系
const temp = { api: ['/front/login', ‘xxxxxx', ‘xxxxx'], api2: ['/test', ‘xxxxxx'], xxx: […] }
這樣等于說顯式的把你所有的需要用到前綴的接口,都列舉出來了。
在axios的請(qǐng)求攔截里,根據(jù)當(dāng)前的請(qǐng)求url,去遍歷temp, 判斷出是屬于哪個(gè)前綴的,然后組裝上去。
對(duì)于那些在這個(gè)temp里無法找到歸屬的請(qǐng)求,那就是默認(rèn)不需要加前綴的,直接放過好了。
這樣的好處有三個(gè),
一是你維護(hù)的時(shí)候,能一眼看出,你的哪些接口,是需要加什么樣前綴的
二是,你在頁面發(fā)起請(qǐng)求的時(shí)候,能保證同樣的調(diào)用方式,不需要在每個(gè)url上改動(dòng)。
三是如果后續(xù)批量前綴修改,你改的容易
如果生產(chǎn)環(huán)境需要調(diào)用其他服務(wù)器接口,那肯定也是要有一定規(guī)則的,有規(guī)則的話,我們匹配規(guī)則然后修改。
或者是一部分接口。那這樣的話,我們也可以用上述這種類似的方法,無非是變成了
const temp = { http://10.0.0.1/api: ['/front/login', ‘xxxxxx', ‘xxxxx'], http://10.0.0.1/api2: ['/test', ‘xxxxxx'], http://10.0.0.1/xxx: […], … http://10.0.1.111/api: ['/sth/xxx'] }
將前綴范圍,擴(kuò)展到包含協(xié)議和域名
動(dòng)態(tài)路由的配置
https://www.nuxtjs.cn/guide/routing
你會(huì)發(fā)現(xiàn)名稱為 users-id 的路由路徑帶有 :id? 參數(shù),表示該路由是可選的。如果你想將它設(shè)置為必選的路由,需要在 users/_id 目錄內(nèi)創(chuàng)建一個(gè) index.vue 文件。
nuxt-dist會(huì)自動(dòng)打包生成配置
重定向及auth權(quán)限
https://auth.nuxtjs.org/guide/middleware
這里說的是 auth的權(quán)限驗(yàn)證 可以放在全局 也可以放在每個(gè)路由里。也可以關(guān)閉,以便中間件跳過檢查。最后它還介紹了一種用法,guest 模式,就是說訪問這個(gè)路由不必非得登錄,但是如果是登錄用戶訪問此頁面,則會(huì)被重定向到 redirect.home 所設(shè)置的路由
場景
有些場景需要登陸狀態(tài)下才能訪問,不然就會(huì)被重定向到/login頁面,現(xiàn)在做了處理,就可以通過設(shè)置auth:false,來處理一些頁面,讓他不用重定向到login,如我現(xiàn)在所遇到的一個(gè)頁面,是通過后臺(tái)生成一個(gè)注冊(cè)鏈接,然后才能注冊(cè)的,這個(gè)頁面不需要token信息。
到此這篇關(guān)于vue-nuxt 登錄鑒權(quán)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)vue-nuxt 登錄鑒權(quán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
elementui+vue+axios實(shí)現(xiàn)文件上傳本地服務(wù)器
這篇文章主要為大家詳細(xì)介紹了elementui+vue+axios實(shí)現(xiàn)文件上傳本地服務(wù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08vue項(xiàng)目中常見的三種文件類型在線預(yù)覽實(shí)現(xiàn)(pdf/word/excel表格)
最近在項(xiàng)目中要做一個(gè)pdf在線預(yù)覽的功能,索性給大家整理個(gè)全面的,這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中常見的三種文件類型在線預(yù)覽實(shí)現(xiàn)的相關(guān)資料,文件類型分別是pdf/word文件/excel表格,需要的朋友可以參考下2022-05-05vue項(xiàng)目前端微信JSAPI與外部H5支付相關(guān)實(shí)現(xiàn)過程及常見問題
這篇文章主要介紹了vue項(xiàng)目前端微信JSAPI與外部H5支付相關(guān)實(shí)現(xiàn)過程及常見問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04vue.js實(shí)現(xiàn)點(diǎn)擊圖標(biāo)放大離開時(shí)縮小的代碼
這篇文章主要介紹了vue.js實(shí)現(xiàn)點(diǎn)擊圖標(biāo)放大離開時(shí)縮小,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Avue和Element-UI動(dòng)態(tài)三級(jí)表頭的實(shí)現(xiàn)
本文主要介紹了Avue和Element-UI動(dòng)態(tài)三級(jí)表頭的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07vue init webpack myproject構(gòu)建項(xiàng)目 ip不能訪問的解決方法
下面小編就為大家分享一篇vue init webpack myproject構(gòu)建項(xiàng)目 ip不能訪問的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03說說如何在Vue.js中實(shí)現(xiàn)數(shù)字輸入組件的方法
這篇文章主要介紹了說說如何在Vue.js中實(shí)現(xiàn)數(shù)字輸入組件的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01vue實(shí)現(xiàn)手機(jī)號(hào)碼抽獎(jiǎng)上下滾動(dòng)動(dòng)畫示例
本篇文章主要介紹了vue實(shí)現(xiàn)手機(jī)號(hào)碼抽獎(jiǎng)上下滾動(dòng)動(dòng)畫示例。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10