0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravelのsanctumを使ってみた2

Posted at

新しくルートを設定します。

routes/api.php
// protected routes
Route::group(['middleware' => ['auth:sanctum']], function () {
    Route::resource('/tasks', TasksController::class);
    Route::post('/logout', [AutoController::class, 'logout']);
});

タスクのDBを作ります。
ユーザーとタスクは1対多です。
必要なファイルを作成

//リソースコントローラー
php artisan make:controller TasksController -r
//モデルとマイグレーションファイル
php artisan make:model Task -m
//リクエストファイル
php artisan make:request StoreTaskRequest
//リソースファイル
php artisan make:resource TaskResource

マイグレーションを編集

migrations/2023_04_16_132901_create_tasks_table.php
public function up(): void
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->string('name');
            $table->string('description');
            $table->string('priority')->default('medium');
            $table->foreign('user_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade');
            $table->timestamps();
        });
    }

モデルを編集

Models/Task.php
class Task extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'description',
        'priority',
        'user_id'
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

データベースを作成

php artisan migrate

ここでseederとかfactoryとかphpmyadminとかで
taskをいくつか作っておきます。

リソースを編集

Resource/TaskResource.php
public function toArray(Request $request): array
    {
        return [
            'id' => (string)$this->id,
            'attributes' => [
                'name' => $this->name,
                'description' => $this->description,
                'priority' => $this->priority,
                'created_at' => $this->created_at,
                'updated_at' => $this->updated_at,
            ],
            'relationships' => [
                'id' => (string)$this->user->id,
                'user name' => $this->user->name,
                'user email' => $this->user->email,
            ],
        ];
    }

コントローラーを編集

TasksController.php
use App\Http\Resources\TaskResource;
use Illuminate\Support\Facades\Auth;

public function index()
    {
        return TaskResource::collection(
            Task::where('user_id', Auth::user()->id)->get()
        );
    }

ここでpostmanでタスクを取得してみる。
urlはhttp://localhost/api/tasks
メソッドはget

Headersの設定に以下を追加
(key) Accept     (value) application/vnd.api+json
(key) Content-Type (value) application/vnd.api+json

Authorizationに以下を追加
(type) Bearer Token (token) さっき返ってきてたトークン

これでデータが取れたらOK。

    
次に
タスクリソースのstoreメソッドも作っていく。

StoreTaskRequest.php
class StoreTaskRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true;
    }

    public function rules(): array
    {
        return [
            'name' => 'required|max:255',
            'description' => 'required',
            'priority' => 'required'
        ];
    }
}
TasksController.php
use App\Http\Requests\StoreTaskRequest;

public function store(StoreTaskRequest $request)
    {
        $request->validated($request->all());

        $task = Task::create([
            'user_id' => Auth::user()->id,
            'name' => $request->name,
            'description' => $request->description,
            'priority' => $request->priority,
        ]);

        return new TaskResource($task);
    }

ここでpostmanでタスクを作成してみる。
問題なければ他のメソッドも作っていく。

最後にログアウトの処理を作る。

AutoController.php
public function logout()
    {
        Auth::user()->currentAccessToken()->delete();

        return response()->json([
            'status' => 'success',
            'message' => 'Logged out'
        ],200);
    }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?