ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

nuxt-authのfetchUserの返り値が空じゃないと$auth.loggedInがtrueになる

スポンサードリンク

自分用のメモ(もし詳細気になる人いたらコメントください→Qiitaにちゃんとまとめるかも)

年末あたりからNuxtを触っているのですが、いまいちよくわからずなんと認証で死んでいます。

ドキュメント等を穴が開くまで見たりしているのですが、まだなれていない。。。

auth.nuxtjs.org

コードも漁ったりしていると、ログイン認証後、結果どうあれ、fetcUserを処理してユーザーデータを取得するようになっているようです。

github.com

で、困った件は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になるのかコードを漁ったところ、下記が気になりました。

github.com

user情報を取得するAPIの値をBooleanへ渡しているのですが、例えば{"user": ""} で渡してしまうとこれがTrueになってしまうので、Nuxt側では$auth.loggedInがTrueになり、ログイン成功したことになるようです。なんでやねん。

というわけで、fetchUser処理時にcallするAPIのresponseの結果を空文字にしてみたところ、$auth.loggedInがFalseになったのでめでたし。