使用 Laravel Passport 處理 API 認證

PHPz
發布: 2024-04-03 13:52:01
轉載
1117 人瀏覽過

使用 Laravel Passport 处理 API 认证

php小編小新帶你探索使用Laravel Passport處理API認證,Laravel Passport是一種完善的OAuth2伺服器實現,可幫助開發者輕鬆實現API認證,並提供了許多便捷功能。透過本文,你將了解如何使用Laravel Passport來管理API使用者驗證,確保API介面的安全性。

第一步. 安裝Laravel

我們需要用以下指令來建立一個最新的Laravel 應用,所以請開啟終端執行:

laravel new auth
登入後複製

第二步. 安裝Laravel Passport 套件

Laravel Passport 可以在幾分鐘內為你的應用實作一個完整的OAuth2 伺服器

composer require laravel/passport
登入後複製

第三步. 執行資料庫遷移

Passport 的遷移會建立你的應用程式用來儲存客戶端和 Access Token 的表。

PHP artisan migrate
登入後複製

第四步. 產生秘鑰

此指令會建立秘鑰以用來產生安全的 Access Token。除此之外,它也會建立用來產生Access Token 的personal accesspassWord grant

php artisan passport:install
登入後複製

執行完畢後,將Laravel\Passport\HasApiTokens trait 加入到你的App\User 模型中。這個trait 會為模型添加一系列助手函數用來驗證使用者的秘鑰和作用域:

第五步. Passport 配置

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use Notifiable, HasApiTokens;
}
登入後複製

接下來,你應該在AuthServiceProvider 中的boot 方法中呼叫Passport::routes 方法。這個方法會註冊必要的路由去頒發存取令牌,撤銷存取令牌,客戶端和個人令牌:

<?php

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    
    protected $policies = [
        &#39;App\Model&#39; => &#39;App\Policies\ModelPolicy&#39;,
    ];

    
    public function boot()
    {
        $this->reGISterPolicies();

        Passport::routes();
    }
}
登入後複製

最後,在config/auth.php 設定檔中,你應該設定api 權限認證守衛的driver 選項為passport。當需要權限認證的 API 請求進來時會告訴你的應用程式去使用 Passport's 的 TokenGuard

&#39;guards&#39; => [
    &#39;WEB&#39; => [
        &#39;driver&#39; => &#39;session&#39;,
        &#39;provider&#39; => &#39;users&#39;,
    ],
    &#39;api&#39; => [
        &#39;driver&#39; => &#39;passport&#39;,
        &#39;provider&#39; => &#39;users&#39;,
    ],
],
登入後複製

第六步. 新增API 路由

Laravel 提供了routes/api.php 檔案來為我們編寫web 路由,因此在這個檔案中新增新的路由即可。

<?php

use Illuminate\Http\Request;

Route::group([
    &#39;prefix&#39; => &#39;auth&#39;
], function () {
    Route::post(&#39;login&#39;, &#39;AuthController@login&#39;);
    Route::post(&#39;signup&#39;, &#39;AuthController@signup&#39;);

    Route::group([
      &#39;middleware&#39; => &#39;auth:api&#39;
    ], function() {
        Route::get(&#39;loGout&#39;, &#39;AuthController@logout&#39;);
        Route::get(&#39;user&#39;, &#39;AuthController@user&#39;);
    });
});
登入後複製

第七步: 建立控制器

最後一步我們必須建立新的控制器和 api 方法。因此我們先創建AuthController 並且把程式碼寫進去:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use App\User;

class AuthController extends Controller
{
    
    public function signup(Request $request)
    {
        $request->validate([
            &#39;name&#39; => &#39;required|string&#39;,
            &#39;email&#39; => &#39;required|string|email|unique:users&#39;,
            &#39;password&#39; => &#39;required|string|confirmed&#39;
        ]);

        $user = new User([
            &#39;name&#39; => $request->name,
            &#39;email&#39; => $request->email,
            &#39;password&#39; => bcrypt($request->password)
        ]);

        $user->save();

        return response()->JSON([
            &#39;message&#39; => &#39;Successfully created user!&#39;
        ], 201);
    }

    
    public function login(Request $request)
    {
        $request->validate([
            &#39;email&#39; => &#39;required|string|email&#39;,
            &#39;password&#39; => &#39;required|string&#39;,
            &#39;remember_me&#39; => &#39;boolean&#39;
        ]);

        $credentials = request([&#39;email&#39;, &#39;password&#39;]);

        if(!Auth::attempt($credentials))
            return response()->json([
                &#39;message&#39; => &#39;Unauthorized&#39;
            ], 401);

        $user = $request->user();

        $tokenResult = $user->createToken(&#39;Personal Access Token&#39;);
        $token = $tokenResult->token;

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

        $token->save();

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

    
    public function logout(Request $request)
    {
        $request->user()->token()->revoke();

        return response()->json([
            &#39;message&#39; => &#39;Successfully logged out&#39;
        ]);
    }

    
    public function user(Request $request)
    {
        return response()->json($request->user());
    }
}
登入後複製

現在我們已經準備好運行我們的範例了,運行下面的命令以快速運行:

php artisan serve
登入後複製

測試

現在,我們可以使用REST 用戶端工具來簡化測試,例如Postman。我執行測試你可以看見以下的截圖。

你要為這個API 設定以下兩個頭資訊:

Content-Type: application/json
X-Requested-With: XMLHttpRequest
登入後複製

使用 Laravel Passport 处理 API 认证

註冊

使用 Laravel Passport 处理 API 认证

登入

使用 Laravel Passport 处理 API 认证

登出

使用 Laravel Passport 处理 API 认证

用戶

使用 Laravel Passport 处理 API 认证


##感謝閱讀!

    資源
  • GitHub
  • #Postman collections
######

以上是使用 Laravel Passport 處理 API 認證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:lsjlt.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!