Openappi-generator로 생성된 Laavel 7 프로젝트에서 Laavel Passport 사용

4946 단어 Laraveltech
openappi-generator에서 생성할 수 있는 코드가 Laavel7 코드여서 약간 중첩되어 있습니다.
이 글에는 Github OpenAPITools/openapi-generator 생성된 계획에서 명령을 수행하는 등 라벨 패스포트를 사용한 인증을 사용할 수 있도록 하는 이전 절차가 담겼다.
Laravel 7 + Laravel Passport
공식

참고 자료


https://www.whizz-tech.co.jp/1442/
https://www.whizz-tech.co.jp/1453/

프로젝트 작성


openapi.yaml 디렉터리에서 다음 명령을 실행합니다
$ docker run --rm -v `pwd`:/work openapitools/openapi-generator-cli:latest generate -i /work/openapi.yaml -g php-laravel -o /work
$ sudo chown -R `whoami`:`whoami` ./lib
composer.json의 프로젝트 이름은 xxx/yyy의 형식으로 개작되었다.

passport 설치


$ cd ./lib
$ composer require laravel/passport:^9
최신 버전에서는 의존이 해결되지 않아 오류가 발생했기 때문에 v9를 명확하게 지정합니다.

migrate


로컬은 sqlite로 합니다
.env.example 복사.env.local 만들기
~省略~

LOG_CHANNEL=stack

DB_CONNECTION=sqlite

CACHE_DRIVER=file
QUEUE_CONNECTION=sync
env를 만들면 링크를 만드는 것이 편리합니다
$ ln -s .env.local .env
응용 키 생성
$ php artisan key:generate
DB용 파일 추가
$ touch ./database/database.sqlite
migrate
$ php artisan migrate

passport의 초기화


$ php artisan passport:install --uuids
yes 를 입력하고 전진하면 DB 마이그레이션이 다시 수행됩니다.

passport 설정


User.php를 생성할 때 존재하지 않기 때문에 스스로 만듭니다.
AuthServiceProvider의 boot에 Passport용routes를 추가합니다.
# いろいろ省略
use Laravel\Passport\Passport;

class AuthServiceProvider extends ServiceProvider
{
    # 省略
    
    public function boot() {
        $this->registerPolicies();
	Passport::routes();
    }
}
양단에passport를 사용하는 인증으로 수정되었습니다.
  'guads' => [
      'api' => [
          'driver' => 'passport',
	  'provider' => 'users',
      ]
  ]

User 모델 생성하기


openappi-generator에서 생성된 코드는 자신이 정의하지 않으면 User 모델이 없기 때문에 스스로 설정합니다.
직접 정의한 경우 생성된 모델을 수정합니다.
<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
    
    protected $fillable = [
        "name",
	"email",
	"password",
    ];
}

authdriver 참조 모델 변경하기


省略
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class, 
        ]
    ]
 
省略

루팅 완료 확인


부팅
$ php artisan serve
$ curl -s http://localhost:8000/oauth/tokens -H "Accept: application/json" | jq
{
  "message": "Unauthenticated."
}
$ curl http://localhost:8000/api/user -H "Accept: application/json" | jq
{
  "message": "Unauthenticated."
}

초기 사용자 등록


응용 프로그램 사양에 따라 사용자 등록을 위한 API 또는 명령을 구현하여 초기 사용자를 등록합니다.

클라이언트 만들기


암호 인증을 사용할 수 있는 사용자를 만듭니다.
$ php artisan passport:client --password
클라이언트 이름과 같은 클라이언트 이름을 계속 입력하고client id와 시크릿을 출력하면 미리 기다립니다.

토큰을 발행하다


등록된 사용자 정보와 보내진client id와 시크릿 요청 영패를 사용합니다.
$ curl -X POST http://localhost:8000/oauth/token \
  -H "Accept: application/json" \
  -d "grant_type=password" \
  -d "client_id=<client id>" \
  -d "client_secret=<client secret>" \
  -d "username=<登録したユーザのID>" \
  -d "password=<登録したユーザのパスワード>" \
  -d "scope="
응답accesstoken과refresh-토큰이 답장하면 OK.

좋은 웹페이지 즐겨찾기