API 인증을 위해 Laravel Sanctum을 사용하는 방법

LARAVEL SANCTUM을 사용하여 LARAVEL 9에서 REST API 인증 만들기



Laravel Sanctum은 SPA(단일 페이지 애플리케이션), 모바일 애플리케이션 및 간단한 토큰 기반 API를 위한 초경량 인증 시스템을 제공합니다.

설치 단계



라라벨 9을 사용하지 않는 경우 라라벨 생텀을 설치해야 합니다. 그렇지 않으면 설치 단계를 건너뛸 수 있습니다.

1 단계



작성기를 통해 설치

composer require laravel/sanctum


2 단계



Sanctum 서비스 공급자 게시

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"


3단계



데이터베이스 마이그레이션

php artisan migrate


라라벨에서 SANCTUM 사용하기



App\Models\User의 사용자 HasApiTokens 특성



Sanctum을 사용하려면 User Model에서 HasApiTokens Trait Class를 사용해야 합니다.
사용자 모델은 다음과 같아야 합니다.

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}


API 인증 경로



API와 관련된 모든 인증을 처리하기 위해 생성AuthController
php artisan make:controller Api\\AuthController

routes\api.php 파일에서 API 업데이트

Route::post('/auth/register', [AuthController::class, 'createUser']);
Route::post('/auth/login', [AuthController::class, 'loginUser']);


이제 다음으로 업데이트AuthContoller
<?php

namespace App\Http\Controllers\Api;

use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller
{
    /**
     * Create User
     * @param Request $request
     * @return User 
     */
    public function createUser(Request $request)
    {
        try {
            //Validated
            $validateUser = Validator::make($request->all(), 
            [
                'name' => 'required',
                'email' => 'required|email|unique:users,email',
                'password' => 'required'
            ]);

            if($validateUser->fails()){
                return response()->json([
                    'status' => false,
                    'message' => 'validation error',
                    'errors' => $validateUser->errors()
                ], 401);
            }

            $user = User::create([
                'name' => $request->name,
                'email' => $request->email,
                'password' => Hash::make($request->password)
            ]);

            return response()->json([
                'status' => true,
                'message' => 'User Created Successfully',
                'token' => $user->createToken("API TOKEN")->plainTextToken
            ], 200);

        } catch (\Throwable $th) {
            return response()->json([
                'status' => false,
                'message' => $th->getMessage()
            ], 500);
        }
    }

    /**
     * Login The User
     * @param Request $request
     * @return User
     */
    public function loginUser(Request $request)
    {
        try {
            $validateUser = Validator::make($request->all(), 
            [
                'email' => 'required|email',
                'password' => 'required'
            ]);

            if($validateUser->fails()){
                return response()->json([
                    'status' => false,
                    'message' => 'validation error',
                    'errors' => $validateUser->errors()
                ], 401);
            }

            if(!Auth::attempt($request->only(['email', 'password']))){
                return response()->json([
                    'status' => false,
                    'message' => 'Email & Password does not match with our record.',
                ], 401);
            }

            $user = User::where('email', $request->email)->first();

            return response()->json([
                'status' => true,
                'message' => 'User Logged In Successfully',
                'token' => $user->createToken("API TOKEN")->plainTextToken
            ], 200);

        } catch (\Throwable $th) {
            return response()->json([
                'status' => false,
                'message' => $th->getMessage()
            ], 500);
        }
    }
}


인증으로 API를 보호하려면 auth:sanctum 미들웨어를 사용해야 합니다.




Route::apiResource('posts', PostController::class)->middleware('auth:sanctum');


결과는 다음과 같습니다.







전체 자습서는 비디오 아래에 있습니다.



REST API를 만드는 동안 문제가 발생하면 쿼리를 댓글로 남겨주세요.

읽어 주셔서 감사합니다

나에게 연락하십시오.

좋은 웹페이지 즐겨찾기