Nuxt.jsとFirebase Authenticationを使ってログイン処理を実装しております。
実現したいことは以下の通りです。
https://sample.com
でログインボタンを押してログイン- ログイン完了後
https://sample.com/mypage/dashboard
にリダイレクト - ログイン中なら
https://sample.com/mypage/◯◯
というmypage以降の階層を自由に行き来できる - ログイン中に
mypage
が含まれないURLにアクセスしたらhttps://sample.com/mypage/dashboard
にリダイレクト - ログインしていない状態で
mypage
が含まれるURLにアクセスしたらhttps://sample.com
にリダイレクト
そこでmiddlewareに以下のように作成したのですが、これだとログイン後にhttps://sample.com/mypage/◯◯
にアクセスするとhttps://sample.com/mypage/dashboard
にリダイレクトされてしまいます。
未ログイン時はmypageに行った際ちゃんとトップページにリダイレクトされます。
js
1 2// middleware/authenticated.js 3 4import { db, auth } from '~/plugins/firebase' 5 6export default function({ route, store, redirect }) { 7 // ログイン時 8 auth.onAuthStateChanged((user) => { 9 if (user) { 10 store.commit('setUserName', user.displayName) 11 12 db.collection('users') 13 .doc(user.uid) 14 .get() 15 .then((doc) => { 16 // もし初回ログインでなければVuexにデータをセットしリダイレクト 17 if (doc.exists) { 18 store.commit('setUser', doc.data()) 19 store.commit('setUid', user.uid) 20 redirect('/mypage/dashboard') 21 } else { 22 // 初回ログインであればCloud Firestoreにドキュメントを作成してリダイレクト 23 const defaultValue = { 24 onamae: user.displayName, 25 prefecture: '未設定' 26 } 27 db.collection('users') 28 .doc(user.uid) 29 .set(defaultValue) 30 .then(() => { 31 store.commit('setUser', defaultValue) 32 store.commit('setUid', user.uid) 33 }) 34 .then(() => { 35 redirect('/mypage/dashboard') 36 }) 37 } 38 }) 39 } else if (route.path.includes('mypage')) redirect('/') 40 }) 41} 42
以下の何点かお聞きしたいのですが、
- そもそも
onAuthStateChanged
はログイン状況が変化したときに発動するもので、何故ログイン後ページ移行する度にonAuthStateChanged
内が動作しているのかも理解できておりません。何故でしょうか? - 上記をふまえ、ログイン後のリダイレクト設定をどのようにしたら良いのか見当がついておりません。普通はこうするよ!的なベストプラクティスがあればお教え頂きたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/20 09:01