Docs Menu
Docs Home
/ / /
Laravel MongoDB

사용자 인증

이 페이지의 내용

  • 개요
  • 사용자 모델 수정
  • 예시
  • 사용자 컨트롤러 만들기
  • 예시
  • 사용자 인증 사용자 지정
  • Laravel 생텀
  • Laravel Passport
  • 비밀번호 알림
  • 추가 정보

이 가이드 에서는 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 파일 을 보여줍니다.

<?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() 함수를 저장 수 있습니다.

<?php
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 사용자 인증 프로세스 를 사용자 지정하는 방법을 설명합니다.

라라벨 생텀은 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 를 활성화 .

<?php
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 애플리케이션에 API 인증 을 제공하는 OAuth 2.0 서버 구현 입니다. 애플리케이션 에 OAuth2 지원 이 필요한 경우 Laravel Passport를 사용하세요.

Laravel Passport 및 OAuth 2.0 프로토콜 에 학습 보려면 다음 리소스를 참조하세요.

Laravel Passport를 설치하고 OAuth2 클라이언트를 저장 하는 데 필요한 데이터베이스 마이그레이션을 실행 하려면 프로젝트 루트에서 다음 명령을 실행 합니다.

php artisan install:api --passport

다음으로 User 모델로 이동하여 Laravel\Passport\HasApiTokens 트레이트를 추가합니다. 이 특성은 사용자의 인증 토큰과 범위를 검사할 수 있는 헬퍼 메서드를 제공합니다. 다음 코드는 app\Models\User.php 파일 에 Laravel\Passport\HasApiTokens 를 추가하는 방법을 보여줍니다.

<?php
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 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() 메서드에 추가합니다.

<?php
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 모델 클래스 가이드 를 참조하세요.

돌아가기

쿼리 빌더