【发布时间】:2019-03-12 19:04:41
【问题描述】:
如果用户在尝试使用以下代码访问某些页面时未登录,我会尝试将用户重定向到登录页面。
// middlware/authenticated.js
import firebase from 'firebase'
export default function ({ store, redirect }) {
let user = firebase.auth().currentUser
store.state.user = user //this doesn't work
if (!user) {
console.log('redirect')
return redirect('/login')
}
}
但是,问题出在此代码上,当我刷新页面时,我被重定向到登录页面,虽然不使用中间件,但我可以在登录后留在同一页面。出于某些原因,我不知道为什么,firebase 不能在中间件中工作。
我应该如何修改这个中间件或实现这个功能?
谢谢。
//middleware/authenticated.js
export default function ({
store,
redirect
}) {
if (!store.getters['index/isAuthenticated']) {
return redirect('/login')
}
}
//post.vue
async mounted () {
if (process.browser) {
let user;
if (!this.user) user = await auth(); // this auth is a plugin
await Promise.all([
this.user ? Promise.resolve() : this.$store.dispatch("setUser", { user: user || null })
]);
this.isLoaded = true;
}
},
//plugins/auth.js
import firebase from '~/plugins/firebase'
function auth () {
return new Promise((resolve, reject) => {
firebase.auth().onAuthStateChanged((user) => {
resolve(user || false)
})
})
}
export default auth
【问题讨论】:
-
我遇到了同样的问题,因为中间件已经发生在服务器端,当我回家时我会给你一些代码,但我这里没有代码。
-
哦,太有帮助了!非常感谢!好的!