前提
こんにちは。
初めて質問させていただきます。
現在AWS上でLaravel6とvueでspaを構築している最中です。
ログイン機能を作るため、sanctumパッケージを使用しているのですが
そのアプリでログインは成功するのですが、ログイン後にユーザー情報を表示するページに移動してもユーザー情報が返ってこず401エラーが発生します。
お忙しいところ恐縮ですが、解決策を教えていただけますでしょうか。
何卒宜しくお願い致します。
- ディレクトリ構成
https://gyazo.com/9176f38db7ec66d160e00b5b19bbab43
このような感じでlaravelの中にvue cliのフロント部分がありapi通信で動きます。
- アプリ作成時に使用したサイト
https://tech.cydas.com/entry/vue-laravel-mspa1
https://qiita.com/Okkun555/items/2b4f999fb310dfea933f
http://adcomsoft.jp/acs_dev/2022/04/03/docker-laravel-vue-js-%E3%81%A7%E7%B0%A1%E5%8D%98spa%E3%80%9C%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%A7%8B%E7%AF%89%E3%80%9C%E7%B7%A8/
- sanctumを導入する際、参考にしたサイト
https://codelikes.com/use-laravel-sanctum/
https://noumenon-th.net/programming/2020/05/26/sanctum/
https://zenn.dev/yudai64/articles/7caaa3c828b828
https://qiita.com/ucan-lab/items/3e7045e49658763a9566
実現したいこと
ここに実現したいことを箇条書きで書いてください。
発生している問題・エラーメッセージ
エラーメッセージ ログイン後にユーザー情報を取得するページにて 401 (Unauthorized)
該当のソースコード
php
api.php Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user();});
js(vue)
login.vue login() { axios.get("/sanctum/csrf-cookie").then(response => { axios.post('/api/login', { email: this.email, password: this.password }) .then(response => { console.log(response); localStorage.setItem("auth", "ture"); this.$router.push("/about"); }) .catch(error => { this.errors = error.response.data.errors; }); }); }
env
laravelのenv SESSION_DRIVER=cookie SESSION_LIFETIME=120 SESSION_DOMAIN= SANCTUM_STATEFUL_DOMAINS=
php
auth.php 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'sanctum', 'provider' => 'users', 'hash' => false, ], ],
php
login controller public function login(Request $request) { $credentials = $request->validate([ 'email' => 'required|email', 'password' => 'required' ]); if (Auth::attempt($credentials)) { return response()->json(['message' => 'Login successful'], 200); } throw ValidationException::withMessages([ 'email' => ['The provided credentials are incorrect'], ]); }
試したこと
auth.phpのdriverをsanctumに変更した(効果なし)
.envのSANCTUM_STATEFUL_DOMAINSをherokuにデプロイしそのドメインを使ってみた。(効果なし)
api.phpに直接書くのではなく、controllerにユーザー情報を返却する処理を書いた(効果なし)
api.phpのreturn $request->user
ではなくreturn Auth::user()
にした(効果なし)
補足情報(FW/ツールのバージョンなど)
開発環境
vue/cli 5.0.8
npm 8.19.2
node 16.15.0
laravel 6.20.44
php 7.33.3
0 コメント