Heim > Fragen und Antworten > Hauptteil
Wenn ich mich als Benutzer anmelde, werde ich wie erwartet zum Dashboard weitergeleitet. Sobald ich mich abmelde und erneut versuche, mich anzumelden (auch mit einem anderen Benutzer und ohne Aktualisierung der Seite), wird in der Konsole dieser Fehler zurückgegeben:
Ich möchte den Benutzer im Dashboard nur dann umleiten, wenn er authentifiziert ist, auch wenn die Seite nicht aktualisiert wird, da mir aufgefallen ist, dass ich mich ohne Probleme anmelden kann, wenn ich die Seite aktualisiere.
Bitte helfen Sie mir, wenn Sie können. Hier ist ein Code:
Anmeldemethode
methods: { ...mapActions({ attempt: "auth/attempt", }), submit(credentials) { axios .post("http://127.0.0.1:8000/api/login", credentials) .then((res) => { // console.log(res.data); if (res.data.success) { this.attempt(res.data.token) } if (res.data.errors) { this.loginErrors = res.data.errors; } else { this.$router.push({ name: 'dashboard' }) } }) .catch((err) => { if ( err.name !== "NavigationDuplicated" && !err.message.includes( "Avoided redundant navigation to current location" ) ) { console.log(err); } }); }, },
Dashboard-Pfad im Router
{ path: '/dashboard', name: 'dashboard', component: DashboardComponent, beforeEnter: (to, from, next) => { if (!store.getters['auth/authenticated']) { return next({ name: 'home' }) } next() } },
Versuchen Sie, Vorgänge im Vuex-Speicher auszuführen
async attempt({ commit, state }, token) { if (token) { commit('SET_TOKEN', token) } // se non c'è if(!state.token) { return } try { await axios.get('http://127.0.0.1:8000/api/user') .then(res => { commit('SET_USER', res.data) }) } catch (e) { commit('SET_TOKEN', null) commit('SET_USER', null) } },
Andere von vuex
namespaced: true, state: { token: null, form: null, }, getters: { authenticated(state) { return state.token && state.form }, user(state) { return state.form }, }, mutations: { SET_TOKEN(state, token) { state.token = token }, SET_USER(state, data) { state.form = data }, },
P粉7712333362024-02-22 10:33:46
更新:应该等待对 attempt()
的调用,否则 this.$router.push({ name: 'dashboard' })
(因此 /dashboard
路由上的守卫函数)将被调用< em>在对 /api/user
API 的调用完成之前:
submit(credentials) { axios .post("http://127.0.0.1:8000/api/login", credentials) .then(async (res) => { // console.log(res.data); if (res.data.success) { await this.attempt(res.data.token) } if (res.data.errors) { this.loginErrors = res.data.errors; } else { this.$router.push({ name: 'dashboard' }) } }) .catch((err) => { if ( err.name !== "NavigationDuplicated" && !err.message.includes( "Avoided redundant navigation to current location" ) ) { console.log(err); } }); },
next
是一个应该准确调用的函数一次(不返回)。
尝试将路由器中的代码更改为:
{ path: '/dashboard', name: 'dashboard', component: DashboardComponent, beforeEnter: (to, from, next) => { if (!store.getters['auth/authenticated']) { next({ name: 'home' }) } else { next() } } },