Laravel使用Passport OAuth 用户登录认证

本文详细介绍了如何使用Laravel Passport进行用户认证,包括安装配置、生成客户端和令牌、处理用户注册并自动返回token的过程。
摘要由CSDN通过智能技术生成
  1. 在开始之前,请通过 Composer 包管理器安装 Passport:
composer require laravel/passport
  1. Passport 服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行 Passport的迁移命令来自动创建存储客户端和令牌的数据表:
php artisan migrate
  1. 接下来,运行 passport:install命令来创建生成安全访问令牌时所需的加密密钥,同时,这条命令也会创建用于生成访问令牌的「个人访问」客户端和「密码授权」客户端:
php artisan passport:install

这个时候可能会报错:

violation: 1071 Specified key was too long; max key length is 1000 bytes

请看https://blog.csdn.net/weixin_44415815/article/details/105359168
如果没有错误,那么将会生成两个Client secret,我们可以打开数据库oaurh_clients查看数据

  1. 接下来我们打开Postman,请求方式选择POST,修改地址:http://……/oauth/token,将所有参数都放在Body中,点击Send,获取token:
    在这里插入图片描述
  2. 然后我们复制access_token创建一个环境变量:
    在这里插入图片描述
    在这里插入图片描述
  3. 我们将token带入到Headers里,就可以获取用户信息:

在这里插入图片描述
扩展

我们希望当用户注册成功之后返回token

  1. 首先我们安装guzzle辅助包:
 composer require "guzzlehttp/guzzle"
  1. 接下来打开app\Http\Controllers\RegisterController创建一个内部的成员变量:private $http;

  2. 然后我们创造一个构造函数:

  use GuzzleHttp\Client as Guzzle;

  public function __construct(Guzzle $http)
    {
        $this->http = $http;
    }
  1. 请求用户access_token:
$response = $this->http->post('http://cscms/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '4',
            'client_secret' => 'Sp6f4OWd7IZrC6VpuOCql02U7CUJG19Fwinxh4hP',
            'username' => $user->email,
            'password' => $request->password,
            'scope' => '*',
        ],
    ]);
    $token = json_decode((string) $response->getBody(), true);
  1. 最后整合注册代码:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\RegisterUserRequest;
use Illuminate\Http\Request;
use App\User;
use GuzzleHttp\Client as Guzzle;

class RegisterController extends Controller
{
    private $http;
    public function __construct(Guzzle $http)
    {
        $this->http = $http;
    }
    public function register(RegisterUserRequest $request)
    {
        $user = User::create([
            'name'      => $request->name,
            'email'     => $request->email,
            'password'  => bcrypt($request->password)
        ]);
        $response = $this->http->post('http://cscms/oauth/token', [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => '4',
                'client_secret' => 'Sp6f4OWd7IZrC6VpuOCql02U7CUJG19Fwinxh4hP',
                'username' => $user->email,
                'password' => $request->password,
                'scope' => '*',
            ],
        ]);
        $token = json_decode((string) $response->getBody(), true);

        return response()->json([
            'token'=> $token
        ],201);
    }
}
  1. 我们用postman来测试一下,可以看到用户注册返回token:

在这里插入图片描述
至此我们已经完成了用户的登录认证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值