自分用のメモ(もし詳細気になる人いたらコメントください→Qiitaにちゃんとまとめるかも)
年末あたりからNuxtを触っているのですが、いまいちよくわからずなんと認証で死んでいます。
ドキュメント等を穴が開くまで見たりしているのですが、まだなれていない。。。
コードも漁ったりしていると、ログイン認証後、結果どうあれ、fetcUserを処理してユーザーデータを取得するようになっているようです。
で、困った件はAPI(サーバ)側で、認証失敗するとNuxt側でもエラーになるように条件分岐しているのですが、試しにログイン後のページを開いてみてみると参照することができました。
API側は認証失敗の場合はエラーになるからデータが引っ張ってこれないので最悪セーフなのですが、気持ち悪いのでNuxt側でもエラーにしたい(つまりログインページにリダイレクトしたい)
そのためにmiddlewareを用意したのですが、なぜか $auth.loggedIn
がTrueになっている。なぜ???
export default function (context) { // ログインしていない場合にログインページに飛ばす if (!context.$auth.loggedIn && context.route.path !== '/sign-in') { return context.redirect('/sign-in') } }
で、なぜこいつがTrueになるのかコードを漁ったところ、下記が気になりました。
user情報を取得するAPIの値をBoolean
へ渡しているのですが、例えば{"user": ""}
で渡してしまうとこれがTrueになってしまうので、Nuxt側では$auth.loggedIn
がTrueになり、ログイン成功したことになるようです。なんでやねん。
というわけで、fetchUser処理時にcallするAPIのresponseの結果を空文字にしてみたところ、$auth.loggedIn
がFalseになったのでめでたし。