Laravel에서는 기존 형식을 기반으로 로그인 및 인증을 구현하는 것이 매우 간단하지만 API 시나리오에서 인증 요구 사항을 충족하는 방법은 무엇입니까? API 시나리오에서 사용자 인증은 일반적으로 요청 간 세션 상태를 유지하는 대신 토큰을 통해 구현됩니다. 이제 Passport를 사용하여 Laravel 프로젝트에서 API 인증 프로세스를 쉽게 구현할 수 있습니다. Passport를 사용하면 몇 분 안에 애플리케이션에 완전한 OAuth2 서버 구현을 추가할 수 있습니다.
Composer 종속성 패키지 관리자를 사용하여 Passport를 설치합니다.
composer require laravel/passport
다음으로 구성 파일 config/app.php의 공급자 배열에 Passport 서비스 공급자를 등록합니다.
Laravel\Passport\PassportServiceProvider::class
Passport 사용 서비스 제공업체는 내부 데이터베이스 마이그레이션 스크립트 디렉터리를 등록하므로 이전 단계가 완료된 후 데이터베이스 구조를 업데이트해야 합니다. Passport의 마이그레이션 스크립트는 애플리케이션에 필요한 클라이언트 데이터 테이블과 토큰 데이터 테이블을 자동으로 생성합니다.
php artisan migrate
다음으로 Passport:install 명령을 실행하여 동시에 보안 액세스 토큰을 생성하는 데 사용되는 암호화 키를 생성해야 합니다. 시간이 지나면 이 명령은 "개인 액세스" 클라이언트 및 "비밀번호 인증" 클라이언트도 생성합니다:
php artisan passport:install
위 명령이 실행된 후 AppUser.php를 수정하여 인증된 사용자 도메인의 토큰 및 사용량을 확인합니다:
<?php namespace App;use Laravel\Passport\HasApiTokens; // 新增use Illuminate\Notifications\Notifiable;use Illuminate\Foundation\Auth\User as Authenticatable;class User extends Authenticatable {use HasApiTokens, Notifiable; // 增加 HasApiTokens
다음으로 AuthServiceProvider의 부팅 메소드에서 Passport::routes 함수를 호출해야 합니다. 이 기능은 액세스 토큰, 클라이언트 및 개인 액세스 토큰의 발급 및 취소 프로세스에 사용될 몇 가지 필수 경로를 등록합니다.
Modify AppProvidersAuthServiceProvider.php:
<?php namespace App\Providers;use Laravel\Passport\Passport; // 新增use Illuminate\Support\Facades\Gate;use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;use Carbon\Carbon; // 新增引用class AuthServiceProvider extends ServiceProvider {/** * The policy mappings for the application. * * @var array */protected $policies = ['App\Model' => 'App\Policies\ModelPolicy',];/** * Register any authentication / authorization services. * * @return void */public function boot() {$this->registerPolicies(); Passport::routes(); // 注册passport路由 //令牌的有效期Passport::tokensExpireIn(Carbon::now()->addDays(15)); Passport::refreshTokensExpireIn(Carbon::now()->addDays(30)); } }
마지막으로 구성 파일 config를 변경해야 합니다. / auth.php의 api 부분에 있는 인증보호 항목(드라이버)이 여권으로 변경되었습니다. 이렇게 조정하면 애플리케이션이 API로부터 인증 요청을 받을 때 Passport의 TokenGuard를 사용하게 됩니다.
'guards' => ['web' => ['driver' => 'session', 'provider' => 'users',], 'api' => ['driver' => 'passport', // 改为passport'provider' => 'users',],],
api의 경로는 api.php입니다. Routesapi.php를 열고 테스트 경로를 추가하세요.
Route::group(['namespace' => 'api'], function () { Route::post('/login', 'UserController@login'); }); Route::group(['middleware' => 'auth:api', 'namespace' => 'api'], function() { Route::get('details', 'UserController@details'); });
하나는 로그인하여 토큰을 얻는 데 사용되고, 다른 하나는 얻은 토큰으로 로그인 인증을 완료하고 현재 사용자 정보를 얻는 데 사용됩니다.
세부 정보 라우팅은 auth:api 미들웨어를 사용하여 토큰을 확인합니다.
AppHttp 디렉터리에 api 폴더를 생성하고 UserController.php를 추가합니다.
<?php namespace App\Http\Controllers\api;use Illuminate\Http\Request;use App\Http\Controllers\Controller;use Illuminate\Support\Facades\Auth;use App\User;use Response;class UserController extends Controller {public function __construct() {$this->content = array(); }public function login() {if(Auth::attempt(['email' => request('email'), 'password' => request('password')])) {$user = Auth::user();$this->content['token'] = $user->createToken('Pizza App')->accessToken;$status = 200; } else {$this->content['error'] = "未授权"; $status = 401; } return response()->json($this->content, $status); }public function details() {return response()->json(['user' => Auth::user()]); } }
postman에서 테스트:
위 그림과 같이 로그인 방법이 경로와 일치해야 하며 post 방법을 사용하여 전송해야 합니다. 양식에 사용자 이메일과 비밀번호를 api/login
올바르게 전달하면 위 그림의 토큰을 받게 됩니다
이전 단계에서 얻은 토큰을 헤더에 추가합니다. 'Bearer' 토큰 앞에 추가하세요. 그러면 현재 사용자의 정보를 얻을 수 있습니다. 즉, 사용자 인증이 완료됩니다.
위 내용이 완전히 정확하다는 보장은 없습니다. 내 GitHub 코드 보기에 오신 것을 환영합니다.
위 내용은 API 시나리오에서 인증 요구 사항을 충족하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!