사용자 인증
개요
이 가이드 에서는 Laravel의 네이티브 인증 기능을 사용하여 MongoDB 사용자를 인증하는 방법을 학습 수 있습니다.
Laravel은 사용자 인증 방법을 정의하는 가드 및 사용자 검색 방법을 정의하는 제공자와 같은 인증 서비스를 포함하는 네이티브 모듈을 제공합니다. 이러한 서비스에 학습 보려면 Auth
인증 을 참조하세요. Laravel 문서에서 확인할 수 있습니다.
사용자 모델 수정
기본값 으로 Laravel은 App/Models
디렉토리 에 User
Eloquent 모델을 생성합니다. MongoDB 사용자에 대한 인증 을 활성화 하려면 User
모델이 MongoDB\Laravel\Auth\User
클래스를 확장해야 합니다.
이 클래스를 확장하려면 app/Models/User.php
파일 로 이동하여 use Illuminate\Foundation\Auth\User as Authenticatable
성명서 을 다음 코드로 바꿉니다.
use MongoDB\Laravel\Auth\User as Authenticatable;
다음으로, 다음 코드에 표시된 대로 User
클래스가 Authenticatable
를 확장하는지 확인합니다.
class User extends Authenticatable { ... }
User
모델을 구성한 후 해당 컨트롤러를 만듭니다. 컨트롤러를 생성하는 방법을 학습 보려면 이 페이지 의 사용자 컨트롤러 생성 섹션을 참조하세요.
예시
다음 코드는 MongoDB\Laravel\Auth\User
클래스를 확장하는 User.php
파일 을 보여줍니다.
namespace App\Models; use MongoDB\Laravel\Auth\User as Authenticatable; class User extends Authenticatable { protected $connection = 'mongodb'; protected $table = 'users'; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; }
사용자 컨트롤러 만들기
인증 을 관리 함수를 저장 하려면 User
모델에 대한 인증 컨트롤러를 만듭니다.
프로젝트 루트에서 다음 명령을 실행하여 컨트롤러를 만듭니다.
php artisan make:controller <filename>
예시
다음 명령은 AuthController.php
이라는 컨트롤러 파일 을 생성합니다.
php artisan make:controller AuthController
AuthController.php
파일 은 다음 코드와 같이 사용자 인증 을 관리 하기 위한 login()
및 logout()
함수를 저장 수 있습니다.
namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Validation\ValidationException; use function response; class AuthController extends Controller { public function login(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); if (Auth::attempt($request->only('email', 'password'))) { return response()->json([ 'user' => Auth::user(), 'message' => 'Successfully logged in', ]); } throw ValidationException::withMessages([ 'email' => ['The provided credentials are incorrect.'], ]); } public function logout() { Auth::logout(); return response()->json(['message' => 'Successfully logged out']); } }
사용자 인증 사용자 지정
애플리케이션의 요구 사항에 맞게 인증 파일을 사용자 지정하고 추가 인증 기능을 활성화 있습니다.
이 섹션에서는 다음 기능을 사용하여 MongoDB 사용자 인증 프로세스 를 사용자 지정하는 방법을 설명합니다.
Laravel 생텀
라라벨 생텀은 API 요청과 단일 페이지 애플리케이션 인증 을 관리 할 수 있는 인증 패키지 입니다. API 요청을 관리 하기 위해 생텀은 데이터베이스 에 저장된 API 토큰을 발급하고 Authorization
헤더를 사용하여 들어오는 HTTP 요청을 인증합니다. 단일 페이지 애플리케이션을 인증하기 위해 생텀은 Laravel의 쿠키 기반 인증 서비스를 사용합니다.
Laravel 생텀을 설치하여 애플리케이션의 인증 프로세스 를 관리 수 있습니다. 프로젝트 루트에서 다음 명령을 실행하여 라라벨 생텀을 설치하고 마이그레이션 파일 을 게시합니다.
composer require laravel/sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Laravel 통합과 함께 Laravel 생텀을 사용하려면 MongoDB\Laravel\Eloquent
네임스페이스 의 DocumentModel
트레이트를 사용하도록 생텀에서 제공하는 PersonalAccessToken
모델을 수정합니다. 다음 코드는 PersonalAccessToken
모델을 수정하여 MongoDB 를 활성화 .
namespace App\Models; use Laravel\Sanctum\PersonalAccessToken as SanctumToken; use MongoDB\Laravel\Eloquent\DocumentModel; class PersonalAccessToken extends SanctumToken { use DocumentModel; protected $connection = 'mongodb'; protected $table = 'personal_access_tokens'; protected $primaryKey = '_id'; protected $keyType = 'string'; }
다음으로, 다음 명령을 실행 하여 데이터베이스 스키마 를 수정합니다.
php artisan migrate
이제 애플리케이션의 서비스 제공자 중 하나에서 usePersonalAccessTokenModel()
메서드를 호출하여 사용자 지정 PersonalAccessToken
모델을 사용하도록 생텀에 지시할 수 있습니다. 학습 보려면 기본 모델 재정의 를 참조하세요. Laravel 생텀 가이드 에서 확인 가능합니다.
팁
DocumentModel
특성에 학습 보려면 Eloquent 모델 클래스 가이드 의 타사 모델 클래스 확장 을 참조하세요.
Laravel Passport
Laravel Passport는 Laravel 애플리케이션에 API 인증 을 제공하는 OAuth 2.0 서버 구현 입니다. 애플리케이션 에 OAuth2 지원 이 필요한 경우 Laravel Passport를 사용하세요.
팁
Laravel Passport 및 OAuth 2.0 프로토콜 에 학습 보려면 다음 리소스를 참조하세요.
Laravel Passport Laravel 문서에서 확인할 수 있습니다.
OAuth 2.0 OAuth 웹사이트 에서 확인 가능합니다.
Laravel Passport 설치
Laravel Passport를 설치하고 OAuth2 클라이언트를 저장 하는 데 필요한 데이터베이스 마이그레이션을 실행 하려면 프로젝트 루트에서 다음 명령을 실행 합니다.
php artisan install:api --passport
다음으로 User
모델로 이동하여 Laravel\Passport\HasApiTokens
트레이트를 추가합니다. 이 특성은 사용자의 인증 토큰과 범위를 검사할 수 있는 헬퍼 메서드를 제공합니다. 다음 코드는 app\Models\User.php
파일 에 Laravel\Passport\HasApiTokens
를 추가하는 방법을 보여줍니다.
namespace App\Models; use MongoDB\Laravel\Auth\User as Authenticatable; use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens; ... }
그런 다음 config\auth.php
파일 에 api
인증 가드를 정의하고 driver
옵션을 passport
로 설정하다 합니다. 이는 애플리케이션 이 Laravel Passport의 TokenGuard
클래스를 사용하여 API 요청을 인증하도록 지시합니다. 다음 예시 에서는 guards
배열 에 api
인증 가드를 추가합니다.
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
Laravel MongoDB 와 함께 Laravel Passport 사용
Laravel Passport를 설치한 후에는 해당 Passport 모델을 확장하는 사용자 지정 Laravel Integration 모델을 정의하여 MongoDB 와의 Passport 호환성을 활성화 해야 합니다. 각 Passport 모델 클래스를 확장하려면 사용자 지정 모델에 DocumentModel
트레이트를 포함합니다. 다음과 같은 Laravel 통합 모델 클래스를 정의할 수 있습니다.
MongoDB\Laravel\Passport\AuthCode
다음을 확장합니다.Laravel\Passport\AuthCode
MongoDB\Laravel\Passport\Client
다음을 확장합니다.Laravel\Passport\Client
MongoDB\Laravel\Passport\PersonalAccessClient
다음을 확장합니다.Laravel\Passport\PersonalAccessClient
MongoDB\Laravel\Passport\RefreshToken
다음을 확장합니다.Laravel\Passport\RefreshToken
MongoDB\Laravel\Passport\Token
다음을 확장합니다.Laravel\Passport\Token
다음 예시 코드는 MongoDB\Laravel\Passport\AuthCode
클래스를 정의할 때 기본값 Laravel\Passport\AuthCode
모델 클래스를 확장하고 DocumentModel
트레이트를 포함합니다.
class MongoDB\Laravel\Passport\AuthCode extends Laravel\Passport\AuthCode { use MongoDB\Laravel\Eloquent\DocumentModel; protected $primaryKey = '_id'; protected $keyType = 'string'; }
각 Laravel\Passport
클래스를 확장하는 사용자 지정 모델을 정의한 후 애플리케이션의 App\Providers\AppServiceProvider
클래스의 boot()
메서드에 있는 모델을 사용하도록 Passport에 지시합니다. 다음 예시 에서는 각 사용자 지정 모델을 boot()
메서드에 추가합니다.
namespace App\Providers; use Illuminate\Support\ServiceProvider; use MongoDB\Laravel\Passport\AuthCode; use MongoDB\Laravel\Passport\Client; use MongoDB\Laravel\Passport\PersonalAccessClient; use MongoDB\Laravel\Passport\RefreshToken; use MongoDB\Laravel\Passport\Token; class AppServiceProvider extends ServiceProvider { /** * Register any application services. */ public function register(): void { } /** * Bootstrap any application services. */ public function boot(): void { Passport::useAuthCodeModel(AuthCode::class); Passport::useClientModel(Client::class); Passport::usePersonalAccessClientModel(PersonalAccessClient::class); Passport::useRefreshTokenModel(RefreshToken::class); Passport::useTokenModel(Token::class); } }
그런 다음 애플리케이션 에서 Laravel Passport와 MongoDB 를 사용할 수 있습니다.
비밀번호 알림
MongoDB 기반 비밀번호 알림에 대한 지원 을 추가하려면 애플리케이션 에 다음 서비스 제공자 를 등록하세요.
MongoDB\Laravel\Auth\PasswordResetServiceProvider::class
이 서비스 제공자 는 비밀번호 미리 알림을 활성화 하도록 내부 DatabaseReminderRepository
을(를) 수정합니다.
예시
다음 코드는 Laravel 애플리케이션 의 bootstrap
디렉토리 에 있는 providers.php
파일 을 업데이트하여 PasswordResetServiceProvider
제공자 를 등록합니다.
return [ App\Providers\AppServiceProvider::class, MongoDB\Laravel\MongoDBServiceProvider::class, MongoDB\Laravel\Auth\PasswordResetServiceProvider::class ];
추가 정보
사용자 인증 에 학습 보려면 인증 을 참조하세요. Laravel 문서에서 확인할 수 있습니다.
Eloquent 모델에 학습 보려면 Eloquent 모델 클래스 가이드 를 참조하세요.