Laravel Passport で API 認証を処理する

PHPz
リリース: 2024-04-03 13:52:01
転載
1154 人が閲覧しました

使用 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:lsjlt.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート