laravel7 passport 多表认证

安装passport

composer require laravel/passport

配置数据库

在这里插入图片描述

创建两张表用于测试登录认证功能

php artisan make:model Admin -m
php artisan make:model Member -m

> 两张表的迁移文件为:
        Schema::create('admins', function (Blueprint $table) {
            $table->id();
            $table->string('username', 100);
            $table->string('password');
            $table->timestamps();
        });

        Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->string('username', 100);
            $table->string('password');
            $table->timestamps();
        });

执行迁移文件

php artisan migrate

配置需要的guards与provider(\config\auth.php)

guard的配置,这里我没有使用自带的guard
在这里插入图片描述

配置passport过期时间(\app\Providers\AuthServiceProvider.php)


     	Passport::routes();
        // accessToken有效期
        Passport::tokensExpireIn(Carbon::now()->addSecond(60));
        // accessRefushToken有效期
        Passport::refreshTokensExpireIn(Carbon::now()->addSecond(60));

在这里插入图片描述

创建客户端

php artisan passport:install
php artisan passport:client --password (注:上面执行了再执行下面这句,不然后面会报错)

在这里插入图片描述

设置model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;

class Member extends Authenticatable
{
    use HasApiTokens;
    public function findForPassport($username)
    {
        return $this->where('username', $username)->first();
    }
}

登录获取token

<?php

namespace App\Http\Controllers;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Http\Request;

class MemberController extends Controller
{
    public function login()
    {
        $http = new Client();
        try {
            $response = $http->post(request()->root() . '/oauth/token', [
                'form_params' => [
                    'grant_type'    => 'password',
                    'client_id'     => '3',
                    'client_secret' => 'L3mikjfe5jz8QcRVPGf7aofoiweSYoUxSaSUxo7L',
                    'username'      => \request('username'),
                    'password'      => \request('password'),
                    'scope'         => '',
                    'provider'      => 'members'
                ],
            ]);
            $token    = json_decode((string)$response->getBody(), true);
        } catch (RequestException $requestException) {
            dd($requestException->getMessage());
        }
        return response()->json($token);
    }
}

在这里插入图片描述

后台admin登录同理操作

注:目前我还没有找到如token过期后能在中间件补获详情异常等,如果有研究过的小伙伴欢迎赐教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值