Rumah >rangka kerja php >Laravel >Pembangunan Laravel: Bagaimana untuk melaksanakan pengesahan SPA dan API menggunakan Laravel Sanctum?

Pembangunan Laravel: Bagaimana untuk melaksanakan pengesahan SPA dan API menggunakan Laravel Sanctum?

WBOY
WBOYasal
2023-06-13 12:36:101182semak imbas

Laravel Sanctum ialah pakej pengesahan ringan yang membolehkan anda melaksanakan pengesahan API dan pengesahan SPA (Aplikasi Halaman Tunggal) dengan mudah dalam aplikasi Laravel. Dalam artikel ini, kami akan meneroka cara menggunakan Laravel Sanctum untuk melaksanakan pengesahan SPA dan API.

Pertama, mari kita lihat apakah itu pengesahan SPA dan API.

Pensijilan SPA merujuk kepada aplikasi satu halaman yang tidak memuatkan semula keseluruhan halaman, tetapi menggunakan AJAX untuk meminta maklumat daripada pelayan web untuk mengemas kini sebahagian kandungan. Apabila menggunakan SPA, API perlu disahkan untuk memastikan bahawa hanya pengguna yang disahkan boleh mengaksesnya.

Pengesahan API merujuk kepada proses pengesahan permintaan API. Apabila pelanggan menghantar permintaan, API perlu mengesahkan bahawa permintaan itu adalah daripada pengguna yang dijangka, dengan itu memastikan titik akhir API hanya digunakan oleh pengguna yang disahkan.

Berikut ialah langkah cara menggunakan Laravel Sanctum untuk melaksanakan pengesahan SPA dan API:

1 Pasang Laravel Sanctum
Kami boleh menggunakan pengurus pakej komposer untuk memasang Laravel Sanctum. Jalankan arahan berikut dalam projek Laravel:

composer require laravel/sanctum

2. Jalankan pemasang Laravel Sanctum
Laravel Sanctum menyediakan pemasang yang mengkonfigurasi aplikasi kami secara automatik semasa pemasangan. Kita boleh menjalankan pemasang ini menggunakan arahan berikut:

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

3. Jalankan migrasi
Kita perlu menjalankan migrasi Sanctum untuk mencipta jadual pangkalan data yang diperlukan untuk menyokong operasi Sanctum. Jalankan arahan berikut:

php artisan migrate

4. Konfigurasikan aplikasi
Kami perlu menambah Laravel Sanctum pada timbunan middleware kami:

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

5. Keluarkan token pengesahan kepada pengguna
Dalam Laravel Sanctum, kita boleh menggunakan kaedah tokenCan untuk menyemak sama ada token mempunyai kebenaran API tertentu. Kami boleh mengeluarkan token pengesahan kepada pengguna menggunakan kaedah 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',
    ]);
}

Ini akan mencipta token untuk pengguna yang dipanggil 'token-name' dengan kebenaran pelayan:update.

6. Lindungi titik akhir API
Dalam pengawal kami, kami boleh menggunakan kaedah "perisian tengah" untuk melindungi titik akhir API:

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

    // Update the server
}

Dalam contoh ini, kami hanya membenarkan mereka yang mempunyai Pengguna dengan pelayan:kebenaran kemas kini mengakses kaedah kemas kini.

7. Menggunakan token pengesahan dalam SPA
Dalam SPA kami, kami boleh menggunakan arahan Sanctum @auth dan @csrf Blade untuk mendapatkan token pengesahan:

<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>

Dalam contoh ini, kami menggunakan Arahan @auth dan @csrf Blade Sanctum untuk mendapatkan token pengesahan pengguna dan token CSRF.

Itu sahaja tentang cara melaksanakan pengesahan SPA dan API menggunakan Laravel Sanctum. Menggunakan Laravel Sanctum memudahkan untuk menjamin titik akhir API dan aplikasi SPA kami serta membantu kami melaksanakan amalan keselamatan terbaik.

Atas ialah kandungan terperinci Pembangunan Laravel: Bagaimana untuk melaksanakan pengesahan SPA dan API menggunakan Laravel Sanctum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn