사용자 정의 모델을 사용한 Laravel 및 JWT 인증

  • 시작하기 전에 이것은 내가 영어로 쓰는 첫 번째 기사이므로 실수에 대해 사과드립니다.

  • 이 기사에서는 기본값(사용자)이 아닌 다른 모델을 사용하여 Laravel API에서 JWT 인증(tymon/jwt-auth 패키지 사용)을 구현하는 방법을 보여줍니다. 마지막에는 이 기사의 내용과 함께 저장소 링크를 사용할 수 있습니다.

    포르투갈어 버전:

    그럼 가자!

    설치



    이 명령을 실행하여 패키지를 설치합니다.

    composer require tymon/jwt-auth
    

    다음 명령을 사용하여 config 폴더에 lib 구성 파일을 게시합니다.

    php artisan vendor:publish - provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
    

    마지막으로 명령을 실행하여 JWT 비밀을 생성해 보겠습니다(이 명령은 .env 파일에 JWT_SECRET 환경을 추가합니다)

    php artisan jwt:secret
    

    이 단계에 대해 질문이 있는 경우 this is the official link to package documentation

    모델 구성



    이제 기본 모델을 변경할 차례입니다. 이 예에서는 Employee라는 모델을 사용하겠습니다.

    이를 위해 동일한 이름의 모델을 사용하여 데이터베이스에 테이블을 생성하기 위해 마이그레이션을 수행합니다.

    php artisan make:migration create_employee_table --create=employee
    

    직원 마이그레이션은 Laravel 설치와 함께 제공되는 동일한 사용자 마이그레이션 구조를 갖지만 차이점은 "job_title"이라는 새로운 열입니다.
    새 열을 자유롭게 추가하되 "이메일"및 "비밀번호"열은 유지하십시오.

    Schema::create('employee', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->string('job_title');
        $table->timestamps();
    });
    

    사용자 마이그레이션 제거 및 실행

    php artisan migrate
    

    직원 모델 만들기

    php artisan make:model Employee
    

    중요: Employee 모델에서 $table 변수를 추가해야 할 수도 있습니다. 데이터베이스에 테스트 사용자를 생성할 때(이 기사의 뒷부분) Laravel이 테이블 이름을 복수형으로 찾으려고 시도할 것이고 이로 인해 오류가 발생하기 때문입니다. . 이미 복수형(직원)으로 테이블을 만든 경우 이 단계를 무시하십시오.

    protected $table = 'employee';
    

    다음 단계는 JWTSubject를 구현하고 Model Employee에서 Authenticatable 클래스(Laravel)를 확장하는 것입니다. 마지막으로 이것이 우리의 모델 콘텐츠가 될 것입니다.




    자, 이제 인증 공급자를 구성할 시간입니다. 이를 위해 config/auth.php 파일에 액세스하고 'providers' 배열에 드라이버(이 예에서는 Eloquent를 사용함)와 해당 모델(직원)을 포함하는 'employess' 인덱스를 추가해야 합니다.





    이제 "api"가드를 애플리케이션 기본값으로 설정하겠습니다. 동일한 파일에서 "defaults"배열에 액세스하고 기본 가드를 "api"로 설정합니다.





    제공자 구성을 마쳤으며 이것이 config/auth.php의 최종 내용이어야 합니다.




    <script id="gist-ltag"src="https://gist.github.com/WenLopes/2ad0b52e47cd2163642e857bb21d4c05.js"/>


    컨트롤러 및 경로 생성



    구현을 테스트하기 위해 인증 컨트롤러를 생성할 시간입니다



    link (official documentation from the package)와 동일한 콘텐츠로 AuthController라는 컨트롤러를 만들고 routes/api.php 파일에 경로를 만듭니다.




    use App\Http\Controllers\AuthController;
    
    Route::post('auth/login', [AuthController::class, 'login'])->name('auth.login');
    


    엔드포인트를 테스트하기 위해 데이터베이스에 직원을 생성하고 이 데이터를 사용하여 인증합니다.



    DatabaseSeeder 파일에서 이 내용을 run 메소드에 삽입




    \App\Models\Employee::create([
        'name' => 'Usuário de teste',
        'email' => '[email protected]',
        'password' => bcrypt( 'senha123' ),
        'job_title' => 'Gerente administrativo'
    ]);
    


    다음 명령을 실행합니다.




    php artisan db:seed
    


    마지막으로 API 클라이언트(Postman, Insomnia...)를 사용하고 api/auth/login 로그인 경로를 사용하여 시더에 정의된 이메일과 비밀번호를 전달합니다. 모든 것이 제대로 작동하면 결과는 다음과 같습니다.





    이제 끝났습니다! 맞춤 모델을 사용한 인증이 작동하고 있습니다.



    이 구현을 통해 저장소를 찾을 수 있습니다link. 리포지토리에서 버전 8의 Nginx, Mysql 및 Laravel과 함께 Docker를 인프라로 사용하고 있습니다. 또한 실패한 인증 메시지 및 만료된 토큰 응답을 반환하기 위해 pattern Strategy을 구현했습니다(이 경우 새로운 유효한 토큰이 반환됨). ).



    그래서 그게 다야. 궁금하신 사항은 댓글 달아주시면 답변드리겠습니다. 관심을 가져주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기