>  기사  >  백엔드 개발  >  PHP 개발: Laravel Sanctum을 사용하여 SPA 애플리케이션 보안 인증 구현

PHP 개발: Laravel Sanctum을 사용하여 SPA 애플리케이션 보안 인증 구현

WBOY
WBOY원래의
2023-06-14 11:37:091503검색

Laravel Sanctum은 Laravel 프레임워크에서 공식적으로 권장하는 경량 사용자 인증 라이브러리로 단일 페이지 애플리케이션(SPA) 및 모바일 애플리케이션에 간단하고 현대적인 인증을 제공하도록 설계되었습니다. 이 글에서는 Laravel Sanctum을 사용하여 SPA 애플리케이션에 대한 보안 인증을 구현하는 방법을 소개합니다.

1. Laravel 설치
먼저 Laravel을 설치해야 합니다. 작곡가를 통해 최신 버전의 Laravel을 설치할 수 있습니다:

composer create-project --prefer-dist laravel/laravel your-project-name

2. Sanctum 구성
Laravel 설치 나중에 Sanctum을 구성해야 하는 경우 먼저 다음 명령을 실행하십시오:

composer require laravel/sanctum

Laravel 5.5 이하 버전에서는 config/app.php 파일에 서비스 공급자 및 Facade를 추가해야 합니다.

'providers' => [

...
LaravelSanctumSanctumServiceProvider::class,

],

'aliases' => [

...
'Sanctum' => LaravelSanctumSanctum::class,

],

Laravel 5.5 이상에서는 서비스 제공자나 Facade를 수동으로 추가할 필요가 없습니다.

그런 다음 Sanctum에 필요한 테이블을 생성하기 위해 데이터베이스 마이그레이션을 수행해야 합니다.

php artisan migration

애플리케이션이 SPA 인증을 사용해야 하는 경우 애플리케이션 도메인과 신뢰할 수 있는 도메인을 추가해야 합니다. 아래 예에서는 프런트엔드 애플리케이션을 사용하여 백엔드 API를 구축한다고 가정합니다.

'paths' => ['api/*', 'sanctum/csrf-cookie'],

'allowed_methods' => '*'],

'allowed_origins' => ['http://your-app-url.com'],

'allowed_origins_patterns' => [],

'allowed_headers' = > *'],

'exposed_headers' => false,

'supports_credentials' => true,

3.index.blade 생성에 있습니다. SPA 인터페이스를 표시하기 위한 리소스/뷰의 .php 파일입니다.

routes/api.php에 API 경로를 작성하세요. 현재 인증된 사용자의 사용자 정보를 반환하기 위해 여기에 테스트 경로를 만듭니다:

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {

return $request->user();

}) ;

다음으로 Sanctum 토큰을 생성하고 관리하기 위해 SPA 애플리케이션별 컨트롤러를 추가해야 합니다. 이 컨트롤러는 토큰을 생성하고 사용자를 위한 인증 쿠키를 발급하는 역할을 담당합니다.

먼저 app/Http/Controllers 폴더에 AuthController와 같은 API 컨트롤러를 생성하세요:

php artisan make:controller API/AuthController

그런 다음 AuthController에 등록 및 로그인 메소드를 추가하세요:

공용 함수 레지스터($request 요청 )

{

$request->validate([
    'name' => 'required|string|max:255',
    'email' => 'required|string|email|unique:users|max:255',
    'password' => 'required|string|min:8|confirmed'
]);

$user = new User([
    'name' => $request->name,
    'email' => $request->email,
    'password' => Hash::make($request->password)
]);

$user->save();

return response()->json([
    'message' => 'Successfully registered'
], 201);

}

공개 함수 로그인($request 요청)

{

$request->validate([
    'email' => 'required|string|email',
    'password' => 'required|string',
    'remember_me' => 'boolean'
]);

$credentials = request(['email', 'password']);

if (!Auth::attempt($credentials)) {
    return response()->json([
        'message' => 'Unauthorized'
    ], 401);
}

$user = $request->user();

$tokenResult = $user->createToken('Personal Access Token');

$token = $tokenResult->token;

if ($request->remember_me) {
    $token->expires_at = Carbon::now()->addWeeks(1);
}

$token->save();

return response()->json([
    'access_token' => $tokenResult->accessToken,
    'token_type' => 'Bearer',
    'expires_at' => Carbon::parse(
        $tokenResult->token->expires_at
    )->toDateTimeString()
]);

}

4 인증 처리

이제 아래에서 토큰 생성, 사용자 등록 및 사용자 로그인 코드에 필요한 모든 준비가 완료되었습니다. 인증 프로세스 구축을 시작합니다.

SPA 애플리케이션은 Sanctum을 사용하여 이메일 및 비밀번호 매개변수를 통해 사용자 자격 증명을 확인하기 위한 POST 요청을 보냅니다. 인증이 성공하면 애플리케이션은 OAuth 토큰을 받습니다.

SPA 애플리케이션을 사용할 때 헤더에 Authorization: Bearer d6fb5a6237ab04b68d3c67881a9080fa을 추가하면 애플리케이션 라우팅을 통해 보호되는 API에 액세스할 수 있습니다.

인증 완료 후, Sanctum을 통한 인증 경로를 이용하여 현재 인증된 사용자의 정보를 얻을 수 있습니다. 예를 들어, 다음 코드를 사용하여 현재 인증된 사용자의 이름을 검색할 수 있습니다:

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {

return $request->user()->name;

}) ;

5. 관련 페이지 및 구성 요소 만들기

Laravel 진입점 파일에 필요한 JavaScript 라이브러리가 포함되어 있는지 확인하세요(여기에서는 Vue.js, Vue Router 및 Axios가 사용됨). resources/js/app.js 파일에서 Vue 구성 요소를 정의합니다.

require('./bootstrap');

import Vue from 'vue';

import App from './views/App';

import './router'에서 라우터;

'./store'에서 저장소 가져오기;

Vue.comComponent('App', App);

const app = new Vue({

el: '#app',
router,
store

});

리소스 생성 파일 보기 및 views/App.vue를 클립하고 필요한 구성 요소(로그인 양식, 등록 양식 등)를 추가합니다. views 폴더에 필요한 모든 페이지 구성 요소를 만듭니다.

시연의 편의를 위해 여기의 코드 양은 약간 더 크므로 공식 Laravel 문서를 직접 확인하시기 바랍니다.

6. API 라우팅 및 AckController를 재구성하고

API 라우팅을 업데이트하고, SPA 라우팅을 AckController에 매핑하고, 미들웨어가 Sanctum 구성을 사용하는지 확인하세요.

Route::middleware('auth:sanctum')->get(' / user', 함수($request 요청) {

return $request->user();

});

Route::post('/register', 'APIAuthController@register');

Route::post('/login', 'APIAuthController@ login ');

Route::middleware('auth:sanctum')->get('/spa/{any}', function () {

return view('index');

})->where('any', ' . *');

암호를 잊어버린 사용자의 요청을 처리하고 암호 재설정 링크 요청에 응답하기 위해 AckController에 ForgottenPassword 및 ResetPassword 메소드를 추가합니다.

public 함수 forgotPassword(Request $request)

{

$request->validate(['email' => 'required|email']);

$user = User::where('email', $request->email)->first();

if (!$user) {
    return response()->json([
        'message' => 'We could not find your account'
    ], 404);
} else {
    $user->sendPasswordResetNotification($request->email);
}

return response()->json([
    'message' => 'We have e-mailed your password reset link!'
]);

}

public 함수 재설정비밀번호($request 요청)

{

$request->validate([
    'email' => 'required|email',
    'token' => 'required|string',
    'password' => 'required|string|confirmed|min:8'
]);

$resetPasswordStatus = Password::reset($request->only('email', 'password', 'password_confirmation', 'token'), function ($user, $password) {
    $user->forceFill([
        'password' => Hash::make($password)
    ])->save();
});

if ($resetPasswordStatus === Password::INVALID_TOKEN) {
    return response()->json(['message' => 'The reset token is invalid']);
}

return response()->json(['message' => 'Your password has been updated']);

}

7. 라우팅 추가
Laravel Sanctum에서는 인증, CSRF 보호 및 오류 보호를 활성화하도록 라우팅을 구성해야 합니다. SPA 애플리케이션에 대한 라우팅을 구현하려면 groban/laravel-livewire를 사용하세요.

8. SPA 애플리케이션 실행
위 단계를 완료한 후 다음 명령을 사용하여 SPA 애플리케이션을 실행할 수 있습니다.

npm run dev

브라우저에서 실행 중인 장치의 호스트 IP 주소 또는 URL을 열어 확인하세요. SPA 응용 프로그램.

마침내 Laravel Sanctum을 사용하여 SPA 애플리케이션의 보안 인증을 성공적으로 구현했습니다. 이 접근 방식을 사용하면 애플리케이션 데이터를 보호하여 무단 액세스를 방지하고 개인 정보를 보호할 수 있습니다.

위 내용은 PHP 개발: Laravel Sanctum을 사용하여 SPA 애플리케이션 보안 인증 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.