Skip to content

Commit ae0dc7c

Browse files
committed
Refactor AuthController to use 'sanctum-api-token' for token creation and update file permissions for various directories
1 parent 68a9a2c commit ae0dc7c

File tree

4 files changed

+41
-5
lines changed

4 files changed

+41
-5
lines changed

README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Laravelはvendor/に数千〜数万のファイルがあり、それを頻繁に
2525

2626
### ユーザー認証
2727
Sanctum とGoogoleOAuth
28+
2829
### CI/CD
2930
ローカルではLaravel、MySQLはDocker Sail環境、Vueはnpm run dev で開発サーバーを使用
3031
フロントエンド(Vue)、バックエンド(Laravel)はlightsailに
@@ -431,6 +432,41 @@ sequenceDiagram
431432
432433
```
433434
435+
##### **bcryptでログイン時パスワード平文をハッシュ化**
436+
437+
438+
439+
0. ユーザー新規登録時`'password' => bcrypt($validated['password']), `
440+
入力された平文パスワード→ハッシュ化
441+
- ソルトの値によってハッシュ値が変わる(ランダムなソルト値が使用される)
442+
ソルトはハッシュ文字列に含まれるので、のちのログイン時に入力されたパスワードを同様にハッシュ化して比較は可能
443+
- 上記についてソルトは公開されていることになるが、パスワードを直接推測出来ないので、安全らしい
444+
- コストファクターはハッシュ化難易度を設定
445+
446+
1. `if (!Auth::attempt($request->only('email', 'password'))) {`
447+
↓(内部的にLaravelでは)
448+
ログイン時に入力されるemailからユーザーを検索
449+
2. DBでemailで一致したユーザーのハッシュ化されたパスワードの
450+
ハッシュに含まれるソルトとコストファクターを抽出
451+
3. 同じソルトとコストファクターで入力されたパスワードをハッシュ化
452+
4. ハッシュ化されたパスワードどうしを比較
453+
454+
上記のメールアドレス、パスワードのログイン時のユーザー認証についてのロジックは
455+
**Sanctumを使用しているわけではない**
456+
457+
**Sanctumでしていること**
458+
- 新規登録、ログイン時にトークン生成(`createToken()`)
459+
- `personal_access_tokens`テーブルにトークンのハッシュを保存
460+
- レスポンスにプレーンテキストトークンを含めて返す
461+
- クライアントはトークンをローカルストレージに保存
462+
- クライアントからリクエスト時に`Authorization: Bearer {token}`ヘッダーで送信
463+
- `auth:sanctum`ミドルウェアがトークンを検証し、有効であれば認証済みユーザーとして処理
464+
- ログアウト時に`personal_access_tokens`テーブルからトークンを削除
465+
466+
467+
468+
469+
434470
### CI/CD 設定
435471
436472
Settings → Secrets and variables → Actions

app/Http/Controllers/Api/AuthController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public function login(Request $request)
6161
* createToken(name): トークン名を指定してトークンを発行
6262
* plainTextToken: トークンを文字列で返却
6363
*/
64-
$authToken = $user->createToken('api-token')->plainTextToken;
64+
$authToken = $user->createToken('sanctum-api-token')->plainTextToken;
6565

6666
return response()->json([
6767
'authToken' => $authToken,
@@ -132,7 +132,7 @@ public function register(Request $request)
132132
$user = User::create([
133133
'name' => $validated['name'],
134134
'email' => $validated['email'],
135-
'password' => bcrypt($validated['password']),
135+
'password' => bcrypt($validated['password']), // パスワードをハッシュ化
136136
]);
137137

138138
// free ロールを付与
@@ -145,7 +145,7 @@ public function register(Request $request)
145145
* createToken(name): トークン名を指定してトークンを発行
146146
* plainTextToken: トークンを文字列で返却
147147
*/
148-
$authToken = $user->createToken('api-token')->plainTextToken;
148+
$authToken = $user->createToken('sanctum-api-token')->plainTextToken;
149149

150150
return response()->json([
151151
'authToken' => $authToken,

app/Http/Controllers/Api/GoogleAuthController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public function handleGoogleCallback(Request $request)
6767
}
6868

6969
// SanctumのAPIトークン発行
70-
$authToken = $user->createToken('auth-token')->plainTextToken;
70+
$authToken = $user->createToken('sanctum-api-token')->plainTextToken;
7171

7272
return response()->json([
7373
'user' => $user->load('roles'), // 付与ロールも返す

app/Models/User.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class User extends Authenticatable
4040
*/
4141
protected $hidden = [
4242
'password',
43-
'remember_token',
43+
'remember_token', // 注意: このプロジェクトでは未使用(API認証にSanctumを使用しているため、WebセッションのRemember Me機能は使用していない)
4444
];
4545

4646
/**

0 commit comments

Comments
 (0)