>PHP 프레임워크 >Laravel >Laravel 개발: Laravel Sanctum을 사용하여 SPA 및 API 인증을 구현하는 방법은 무엇입니까?

Laravel 개발: Laravel Sanctum을 사용하여 SPA 및 API 인증을 구현하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-06-13 12:36:101181검색

Laravel Sanctum은 Laravel 애플리케이션에서 API 인증과 SPA(Single Page Application) 인증을 쉽게 구현할 수 있는 경량 인증 패키지입니다. 이 글에서는 Laravel Sanctum을 사용하여 SPA 및 API 인증을 구현하는 방법을 살펴보겠습니다.

먼저 SPA와 API 인증이 무엇인지 알아보겠습니다.

SPA 인증은 전체 페이지를 다시 로드하지 않고 AJAX를 사용하여 웹 서버에 정보를 요청하여 부분 콘텐츠를 업데이트하는 단일 페이지 애플리케이션을 말합니다. SPA를 사용할 때 API는 인증된 사용자만 액세스할 수 있도록 인증되어야 합니다.

API 인증은 API 요청 인증 프로세스를 의미합니다. 클라이언트가 요청을 보낼 때 API는 해당 요청이 예상 사용자로부터 온 것인지 확인해야 하므로 API 엔드포인트가 인증된 사용자만 사용되도록 해야 합니다.

Laravel Sanctum을 사용하여 SPA 및 API 인증을 구현하는 방법은 다음과 같습니다.

1. Laravel Sanctum 설치
작곡가 패키지 관리자를 사용하여 Laravel Sanctum을 설치할 수 있습니다. Laravel 프로젝트에서 다음 명령을 실행하세요:

composer require laravel/sanctum

2. Laravel Sanctum 설치 프로그램 실행
Laravel Sanctum은 설치 중에 애플리케이션을 자동으로 구성하는 설치 프로그램을 제공합니다. 다음 명령을 사용하여 이 설치 프로그램을 실행할 수 있습니다:

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"

3. 마이그레이션 실행
Sanctum 작업을 지원하는 데 필요한 데이터베이스 테이블을 생성하려면 Sanctum 마이그레이션을 실행해야 합니다. 다음 명령을 실행하세요:

php artisan migrate

4. 애플리케이션 구성
미들웨어 스택에 Laravel Sanctum을 추가해야 합니다:

'api' => [
    'middleware' => ['auth:sanctum'],
    'throttle:60,1',
    'prefix' => 'api',
    'namespace' => 'AppHttpControllersAPI',
],

5. 사용자에게 인증 토큰을 발급합니다.
Laravel Sanctum에서는 tokenCan 메소드를 사용할 수 있습니다. 토큰에는 특정 API 권한이 있습니다. createToken 메소드를 사용하여 사용자에게 인증 토큰을 발행할 수 있습니다:

use IlluminateHttpRequest;

/**
 * Store a newly created resource in storage.
 *
 * @param  IlluminateHttpRequest  $request
 * @return IlluminateHttpResponse
 */
public function store(Request $request)
{
    $user = User::find(1);
    $token = $user->createToken('token-name', ['server:update'])->plainTextToken;

    return response()->json([
        'access_token' => $token,
        'token_type' => 'Bearer',
    ]);
}

이렇게 하면 server:update 권한이 있는 'token-name'이라는 사용자에 대한 토큰이 생성됩니다.

6. API 엔드포인트 보호
컨트롤러에서는 "미들웨어" 메서드를 사용하여 API 엔드포인트를 보호할 수 있습니다.

public function update(Request $request, $id)
{
    if (!$request->user()->tokenCan('server:update')) {
        abort(403, 'Unauthorized');
    }

    // Update the server
}

이 예에서는 server:update 권한이 있는 사용자만 업데이트 메서드에 액세스하도록 허용합니다.

7. SPA에서 인증 토큰 사용
SPA에서는 Sanctum의 @auth 및 @csrf 블레이드 지시어를 사용하여 인증 토큰을 얻을 수 있습니다.

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Laravel</title>

    <!-- Fonts -->
    <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
    <script src="{{ asset('js/app.js') }}" defer></script>

    <!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">

    <!-- Meta -->
    <meta name="csrf-token" content="{{ csrf_token() }}">
</head>
<body>
    <div id="app">
        <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
            <div class="container-fluid">
                <a class="navbar-brand" href="{{ url('/') }}">
                    {{ config('app.name', 'Laravel') }}
                </a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
                    <span class="navbar-toggler-icon"></span>
                </button>

                <div class="collapse navbar-collapse" id="navbarSupportedContent">
                    <!-- Left Side Of Navbar -->
                    <ul class="navbar-nav mr-auto">

                    </ul>

                    <!-- Right Side Of Navbar -->
                    <ul class="navbar-nav ml-auto">
                        <!-- Authentication Links -->
                        @guest
                            <li class="nav-item">
                                <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
                            </li>
                            @if (Route::has('register'))
                                <li class="nav-item">
                                    <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
                                </li>
                            @endif
                        @else
                            <li class="nav-item dropdown">
                                <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
                                    {{ Auth::user()->name }}
                                </a>

                                <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
                                    <a class="dropdown-item" href="{{ route('logout') }}"
                                       onclick="event.preventDefault();
                                                     document.getElementById('logout-form').submit();">
                                        {{ __('Logout') }}
                                    </a>

                                    <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                                        @csrf
                                    </form>
                                </div>
                            </li>
                        @endguest
                    </ul>
                </div>
            </div>
        </nav>
        <main class="py-4">
            @yield('content')
        </main>
    </div>
    @auth
        <script>
            window.Laravel = {!! json_encode([
                'csrf_token' => csrf_token(),
                'api_token' => Auth::user()->api_token
            ]) !!};
        </script>
    @endauth
</body>

이 예에서는 Sanctum을 사용했습니다. @auth 및 @csrf 블레이드 지시어는 다음과 같습니다. 사용자 인증 토큰 및 CSRF 토큰을 얻는 데 사용됩니다.

Laravel Sanctum을 사용하여 SPA 및 API 인증을 구현하는 방법에 대한 모든 것입니다. Laravel Sanctum을 사용하면 API 엔드포인트와 SPA 애플리케이션을 쉽게 보호할 수 있으며 최고의 보안 관행을 구현하는 데 도움이 됩니다.

위 내용은 Laravel 개발: Laravel Sanctum을 사용하여 SPA 및 API 인증을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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