安装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)
配置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过期后能在中间件补获详情异常等,如果有研究过的小伙伴欢迎赐教