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

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

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

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

1271閲覧

laravel sanctumを利用してログイン後にユーザー情報を取得することができない

front

総合スコア12

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2021/07/24 08:26

編集2021/07/28 01:56

前提・実現したいこと

自己学習でブログサービスを開発中。
構成は下記であり、すべてdockerを利用してコンテナ環境で稼働させている

  • フロント next.js
  • バックエンド Laravel
  • db mysql

お手数ですがreadmeを見て、環境構築していただき、下記の問題の解決策を提示いただけると幸いです。

発生している問題・エラーメッセージ

laravel sanctumで認証を実施し、フロントエンドで会員登録、ログイン、ユーザー情報取得まで実施しようとしたところ、下記のような状態である。

  • 仮会員登録画面にて会員登録処理を実施
  • localhost:8025のメールサーバコンテナにアクセスし、メールのリンクから会員登録画面に飛ぶ
  • 会員登録画面で登録処理実施
  • ログイン画面でログイン処理実施(この認証をlaravel sanctumで実施している)
  • ホーム画面でfetchLoginUser()関数でapi/userを叩くと401エラーとなる

会員登録からログインまで実施でき、ユーザー情報を取得しようとしたところエラーとなる。

ゴールとしてはLaravel sanctumを利用してユーザー情報が取得できることを確認したい

コード

api.php

<?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\TestAPIController; use App\Http\Controllers\PreRegisterUserAPIController; use App\Http\Controllers\VerifyTokenController; use App\Http\Controllers\ArticleAPIController; use App\Http\Controllers\UserAPIController; use App\Http\Controllers\AuthAPIController; use App\Models\Article; Route::get('test', [TestAPIController::class,"index"]); //仮会員登録 Route::post('/user/pre_register', [PreRegisterUserAPIController::class, 'store']); // 仮会員登録のtoken確認 Route::get('/verify/{token}', [VerifyTokenController::class, 'index']); // 認証 Route::post('/login', [AuthAPIController::class, 'login']); Route::post('/logout', [AuthAPIController::class, 'logout']); // 会員情報 Route::post('/user', [UserAPIController::class, 'store']); Route::get('/user/{user_id}', [UserAPIController::class, 'show'])->middleware('auth:sanctum', 'loginUserCheck'); Route::put('/user/{user_id}', [UserAPIController::class, 'update'])->middleware('auth:sanctum', 'loginUserCheck'); Route::delete('/user/{user_id}', [UserAPIController::class, 'destroy'])->middleware('auth:sanctum', 'loginUserCheck'); // ユーザー情報の取得 Route::get('/user', function (Request $request) { return $request->user(); })->middleware('auth:sanctum');

AuthAPIController(ログインログアウト用のコントローラー)

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Http\Requests\AuthRequest; 7use App\Repositories\Auth\AuthRepository; 8 9class AuthAPIController extends Controller 10{ 11 private $auth_repository; 12 13 public function __construct(AuthRepository $auth_repository) 14 { 15 $this->auth_repository = $auth_repository; 16 } 17 18 public function login(AuthRequest $request) 19 { 20 return $this->auth_repository->login($request); 21 } 22 23 public function logout(Request $request) 24 { 25 return $this->auth_repository->logout($request); 26 } 27} 28

AuthRepository(ログイン、ログアウト処理)

php

1<?php 2 3namespace App\Repositories\Auth; 4 5use Illuminate\Support\Facades\Auth; 6 7 8class AuthRepository implements AuthInterface { 9 public function login($request){ 10 $credentials = $request->validate([ 11 'email' => ['required', 'email'], 12 'password' => ['required','min:8'], 13 ]); 14 15 if(Auth::attempt($credentials)){ 16 $request->session()->regenerate(); 17 return response()->messageAndStatusCode('ログインが完了しました。', 200); 18 } 19 20 return response()->messageAndStatusCode('ユーザーが見つかりません。', 404); 21 } 22 23 public function logout($request){ 24 Auth::logout(); 25 26 $request->session()->invalidate(); 27 28 $request->session()->regenerateToken(); 29 30 return response()->messageAndStatusCode('ログアウトが完了しました', 200); 31 } 32} 33

試したこと

  • laravel sanctumの公式ドキュメントをもとに実装
  • qiitaやzennの記事をもとに検証
  • youtubeでlaravel sanctumのSPA認証方法を調査

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

laravelのversionは8系です

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問