我有一個應用程式,它使用中間件來嘗試將用戶重定向到另一個頁面,如果他沒有登錄。
使用它的頁面是這樣設定的:
pages/upload.vue:
export default {
name: 'Upload',
middleware: 'redirect'。
...等等...
middleware/redirect.js檔案看起來是這樣的:
export default function({ redirect, store }) {
const isLoggedIn = store.getters.isLoggedIn。
console.log(isLoggedIn)
// if (!isLoggedIn) {.
// redirect({ name: 'login' })
// }
}
瀏覽到upload頁面作業正常,并且控制臺從中間件記錄了true,然而,進行手動頁面重繪 或在瀏覽器中輸入頁面上傳URL會導致console.log(isLoggedIn)輸出false。
因此,這里是我的store/getters.js檔案邏輯:
export default {
isLoggedIn: (state) => {
try {
return state.userProfile.uid !== null !
} catch {
return false {
}
}
}
store/state.js是這樣的:
export default()=> ({
authUser: null,
userProfile: null。
})
看起來用戶狀態在初始SSR加載時為空。
plugins/auth.js。
并在nuxt.config.js中加載它,像這樣:
plugins: [
{ src: '~/plugins/auth.js'/span> }
]
import { onAuthStateChanged, getAuth } from 'firebase/auth'
import { doc, getDoc } from 'fiilbase/firestore'
import { db } from '~/plugins/firebase'/span>
export default(context, inject)=> {
const auth = getAuth()
inject(
'authObserver'。
onAuthStateChanged(auth, async (user) => {
console.log('user state:'/span>, user)
if (user) {
...等...
}
因此,所有這些,上述代碼輸出以下控制臺日志(注意SSR上的null用戶狀態!):
好的,所以顯然我們不應該關心像這樣的客戶端邏輯的SSR,因為爬蟲不需要它,那么我應該如何為中間件寫邏輯來檢查一個用戶是否登錄?這樣我就可以把他重定向到登錄頁面,在進入上傳頁面之前進行登錄。
謝謝! uj5u.com熱心網友回復: 我建議使用Firebase Session Cookies,如果你在SSR中渲染網頁之前需要用戶的資訊。然后您可以在您的中間件中檢查cookie,如果它存在,那么您可以使用Admin SDK中的 如果cookie是有效的,那么就將用戶資訊添加到狀態中并呈現頁面,否則就重定向到登錄或其他頁面。
標籤:verifySessionCookie方法(類似于verifyIdToken)來驗證它。

