質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

0回答

2885閲覧

Sanctumで認証保護しているルートにアクセスできない

nennw

総合スコア0

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/05/16 06:35

前提・実現したいこと

Laravelにて、Sanctumを使用した認証APIを作成しました。
ログインは実装できたものの、動作確認としてmiddlewareで認証保護しているルートにアクセスすると401を返されてしまいます。

調べてみると.envで設定した環境変数が間違っている可能性が高いと思われましたが、間違っている箇所がわかりません。

エラーメッセージ

http://localhpst:10080/api/userへPOSTした際のレスポンス

"message": "Unauthenticated."

該当のソースコード

php

1// api.php 2 3// こちらにアクセスできない 4Route::group(['middleware' => ['auth:sanctum']], function () { 5 Route::post('/user', function(Request $request){ 6 return response()->json([ 7 'name' => Auth::user()->name, 8 ]); 9 }); 10}); 11 12// ログインは可能 13Route::post('/login', [LoginController::class, 'login']);

php

1// LoginControllerクラスのloginメソッド 2 3    $credentials = $request->only('login_id', 'password'); 4 5    DB::beginTransaction(); 6    try { 7   $result = UserService::login($credentials); 8  if(!$result){ 9 Log::warning('user.login: auth failure'); 10 return $this->createResponse("failure", CodeConst::AUTH_FAILURE); 11  } 12  DB::commit(); 13 14  } catch (\Exception $e) { 15 Log::error('user.login: error', [$e->getTraceAsString()]); 16 DB::rollback(); 17 return $this->createResponse("failure", CodeConst::SYSTEM_ERROR); 18  } 19 20      $data = [ 21       'user' => Auth::user(), 22      ]; 23 24    // jsonでレスポンスを生成するメソッドへ渡す 25    return $this->createResponse("success", CodeConst::SUCCESS, $data);

php

1// UserServiceクラスのloginメソッド 2 3 /** 4 * ユーザログイン処理 5 * 6 * @param [type] $credentials 7 * @return void 8 */ 9 public function login($credentials) { 10 if (!Auth::attempt($credentials)) { 11 return false; 12 } 13 return true; 14 }

json

1// ログインのリクエスト 2 3{ 4 login_id: "ログインID" 5 password: "パスワード" 6} 7 8// レスポンス 9{ 10 "header": { 11 "status": "success", 12 "code": 0 13 }, 14 "response": { 15 "user": { 16 "id": ユーザーID, 17 "login_id": ログインID, 18 "name": 名前, 19 "last_login_at": null, 20 "deleted_at": null, 21 "created_at": "2021-05-16T02:25:42.000000Z", 22 "updated_at": null 23 } 24 } 25}

試したこと

補足情報にある記事を見つつ、各設定を確認しました。

env

1 2APP_URL=http://localhost 3 4SANCTUM_STATEFUL_DOMAINS=localhost:10080 5SESSION_DOMAIN=localhost

php

1// config/sanctum.php 2 3'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS','localhost,127.0.0.1,127.0.0.1:10080,::1')),

php

1// config/cors.php 2 3'paths' => ['api/*', 'sanctum/csrf-cookie'], 4 5'allowed_methods' => ['*'], 6 7'allowed_origins' => ['*'], 8 9'allowed_origins_patterns' => [], 10 11'allowed_headers' => ['*'], 12 13'exposed_headers' => [], 14 15'max_age' => 0, 16 17'supports_credentials' => true,

補足情報(FW/ツールのバージョンなど)

対処するにあたって参照した記事:
readouble.com
Laravel SanctumでSPA認証ができない(Unauthenticated.)


開発環境はdocker-composeにて構築しています。

ディレクトリ構成

├─ backend(Laravelプロジェクト)
├─ infra
│ ├─ mysql(Dockerfilemy.conf
│ ├─ nginx(default.conf
│ └─ php(Dockerfilephp.ini
├─ docker-compose.yml
├─ fugahoge.py
└─ Makefile


  • Laravel8
  • PHP7
  • MacOS
  • Docker Desktop
  • Postman

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問