使用 Laravel Passport 处理 API 认证

叮当号小新带你探索使用laravel passport处理api认证,laravel passport是一种完善的oauth2服务器实现,可帮助开发者轻松实现api认证,并提供了许多便捷功能。通过本文,你将了解如何使用laravel pa

使用 Laravel Passport 处理 API 认证

叮当号小新带你探索使用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

登录后复制

执行完毕后,将 LaravelPassportHasApiTokens trait 添加到你的 AppUser 模型中。这个 trait 会为模型添加一系列助手函数用来验证用户的秘钥和作用域

第五步 . Passport 配置

<?php

namespace App;

use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
use LaravelPassportHasApiTokens;

class User extends Authenticatable
{
    use Notifiable, HasApiTokens;
}

登录后复制

接下来,你应该在 AuthServiceProvider 中的 boot 方法中调用 Passport::routes 方法。这个方法会注册必要的路由去颁发访问令牌,撤销访问令牌,客户端和个人令牌:

<?php

namespace AppProviders;

use LaravelPassportPassport;
use IlluminateSupportFacadesGate;
use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    
    protected $policies = [
        'AppModel' => 'AppPoliciesModelPolicy',
    ];

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

        Passport::routes();
    }
}

登录后复制

最后,在 config/auth.php 配置文件中,你应该设置 api 权限认证守卫的 driver 选项为 passport。当需要权限认证的 API 请求进来时会告诉你的应用去使用 Passport's 的 TokenGuard

'guards' => [
    'WEB' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

登录后复制

第六步. 添加 API 路由

Laravel 提供了 routes/api.php 文件来给我们编写 web 路由,因此在这个文件添加新的路由即可。

<?php

use IlluminateHttpRequest;

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

    Route::group([
      'middleware' => 'auth:api'
    ], function() {
        Route::get('loGout', 'AuthController@logout');
        Route::get('user', 'AuthController@user');
    });
});

登录后复制

第七步: 创建控制器

最后一步我们必须创建新的控制器和 api 方法。因此我们先创建 AuthController 并且把代码写进去:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
use CarbonCarbon;
use AppUser;

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

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

        $user->save();

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

    
    public function login(Request $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()
        ]);
    }

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

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

    
    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 认证的详细内容,更多请关注叮当号网其它相关文章!

文章来自互联网,只做分享使用。发布者:木子,转转请注明出处:https://www.dingdanghao.com/article/300630.html

(0)
上一篇 2024-04-03 14:00
下一篇 2024-04-03 14:00

相关推荐

联系我们

在线咨询: QQ交谈

邮件:442814395@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信公众号