ここではコメントを新規に投稿したときに,認証されたユーザの ID をコメントに記録する機能を作成します.ログイン中(API の場合は認証された)ユーザの情報は Auth::user()
で取得できます.次のとおり,コントローラでユーザの情報をコメントに設定するだけです.
app/Http/Controllers/CommentController.php (抜粋)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Comment;
use App\Http\Resources\CommentResource;
use App\Http\Resources\CommentCollection;
class CommentController extends Controller
{
...(中略)...
public function store(Request $request)
{
$user = Auth::user();
$comment = new Comment();
$comment->title = $request->title;
$comment->body = $request->body;
$comment->user_id = $user->id;
$comment->save();
return new CommentResource($comment);
}
...(以下略)...
コメントを表示する際にユーザのIDも表示するようにリソースを編集します.
app/Http/Resources/CommentResource.php (抜粋)
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Carbon;
class CommentResource extends JsonResource
{
...(中略)...
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
// return parent::toArray($request);
return [
'id' => $this->id,
'title' => $this->title,
'body' => $this->body,
'user_id' => $this->user_id,
'updated_at' => $this->updated_at->addHours(Carbon::now()->offsetHours),
];
}
前のページでデータベースを一旦ロールバックしました.その関係でトークンもリセットされています.そのことをデータベースを検索して確認します.
sqlite> SELECT * FROM personal_access_tokens; ⏎
sqlite>
ですのでメールアドレスとパスワードを使ってトークンを再発行します.
C:\Users\Rinsaka>curl -X POST -d "email=a@sample.com" -d "password=abc" http://192.168.56.101:8000/api/login/ ⏎ {"user":{"id":1,"name":"A. Sample","email":"a@sample.com","email_verified_at":null,"created_at":"2023-11-02T15:01:01.000000Z","updated_at":"2023-11-02T15:01:01.000000Z"},"token":"1|fzYV0EEfaDBGy5sifY9V3A6LWZBPmZklpWy4Auxd018912e0"} C:\Users\Rinsaka>curl -X POST -d "email=b@sample.com" -d "password=abc" http://192.168.56.101:8000/api/login/ ⏎ {"user":{"id":2,"name":"B. Sample","email":"b@sample.com","email_verified_at":null,"created_at":"2023-11-02T15:02:01.000000Z","updated_at":"2023-11-02T15:02:01.000000Z"},"token":"2|mAcqEZVmlUYs9qM4LuuKyWwCihEhfsW0f65M5Bexbcd36bb8"} C:\Users\Rinsaka>curl -X POST -d "email=c@sample.com" -d "password=abc" http://192.168.56.101:8000/api/login/ ⏎ {"user":{"id":3,"name":"C. Sample","email":"c@sample.com","email_verified_at":null,"created_at":"2023-11-02T15:03:01.000000Z","updated_at":"2023-11-02T15:03:01.000000Z"},"token":"3|q066FpNs1mXXfdEnc1SeUCoGpl3NtjScpPaYZiOt0c9779fe"} C:\Users\Rinsaka>
上で発行されたトークンを利用してコメントを POST します.すると,使用されたトークンに紐づけられた user_id が正しく保存できていることを確認できました.
C:\Users\Rinsaka>curl -X POST -d "title=a@sample" -d "body=user id test" -H "Authorization: Bearer 1|fzYV0EEfaDBGy5sifY9V3A6LWZBPmZklpWy4Auxd018912e0" http://192.168.56.101:8000/api/comments/ ⏎ {"comment":{"id":101,"title":"a@sample","body":"user id test","user_id":1,"updated_at":"2023-12-18T11:22:20.000000Z"}} C:\Users\Rinsaka>curl -X POST -d "title=b@sample" -d "body=user id test" -H "Authorization: Bearer 2|mAcqEZVmlUYs9qM4LuuKyWwCihEhfsW0f65M5Bexbcd36bb8" http://192.168.56.101:8000/api/comments/ ⏎ {"comment":{"id":102,"title":"b@sample","body":"user id test","user_id":2,"updated_at":"2023-12-18T11:22:27.000000Z"}} C:\Users\Rinsaka>curl -X POST -d "title=user_c" -d "body=user id test" -H "Authorization: Bearer 3|q066FpNs1mXXfdEnc1SeUCoGpl3NtjScpPaYZiOt0c9779fe" http://192.168.56.101:8000/api/comments/ ⏎ {"comment":{"id":103,"title":"user_c","body":"user id test","user_id":3,"updated_at":"2023-12-18T11:22:32.000000Z"}} C:\Users\Rinsaka>
念の為にデータベースも検索して確認しておきます.
sqlite> SELECT id, user_id, created_at, updated_at, title FROM comments WHERE id >95; ⏎ id|user_id|created_at|updated_at|title 96|3|2023-10-30 09:02:46|2023-11-07 18:06:19|津田 幹 97|1|2023-10-30 09:03:46|2023-11-16 10:31:00|吉田 知実 98|2|2023-10-30 09:04:47|2023-11-27 23:26:42|田辺 結衣 99|3|2023-10-30 09:05:47|2023-11-14 09:43:07|井上 亮介 100|1|2023-10-30 09:06:48|2023-11-30 16:15:24|宮沢 健一 101|1|2023-12-18 11:22:20|2023-12-18 11:22:20|a@sample 102|2|2023-12-18 11:22:27|2023-12-18 11:22:27|b@sample 103|3|2023-12-18 11:22:32|2023-12-18 11:22:32|user_c sqlite>