Passport 认证
- 安装conposer拓展
composer require laravel/passport
- 生成passport配置文件
<?php
return [
'scopes' => [
'place-orders' => 'Place orders',
'check-status' => 'Check order status',
'*' => 'all scopes',
],
'default' => [
'client_id' => env('CLIENT_ID'),
'client_secret' => env('CLIENT_SECRET'),
'scope' => '*',
],
// 访问令牌有效期(天)
'tokensExpireIn' => 15,
// 刷新后的访问令牌有效期(天)
'refreshTokensExpireIn' => 30,
];
- 运行migrate命令生成表
php artisan migrate
- 生成访问秘钥
php artisan passport:install
- 在模型中添加引用
use HasApiTokens, Notifiable;
- 在Providers/AuthServiceProvider中的boot方法中添加访问路由
public function boot()
{
$this->registerPolicies();
//注册发出访问令牌并撤销访问令牌、客户端和个人访问令牌所必需的路由
Passport::routes();
// 定义令牌作用域
Passport::tokensCan(config('passport.scopes'));
// 访问令牌有效期(天)
Passport::tokensExpireIn(now()->addDays(15));
// 刷新后的访问令牌有效期(天)
Passport::refreshTokensExpireIn(now()->addDays(30));
}
- 在config/auth.php中设置驱动
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\Login::class,
],
- 请求获取token
public function getToken($username, $password)
{
$data = [
'username' => $username,
'password' => $password,
'scope' => config('passport.default.scope'),
'client_id' => config('passport.default.client_id'),
'client_secret' => config('passport.default.client_secret'),
'grant_type' = 'password'
];
$http = new Client();
try {
$result = $http->post(url('/oauth/token'), [
'form_params' => $data,
]);
} catch (\Exception $e) {
\Log::error('申请密码令牌失败:字段信息为:' . json_encode($data) . '错误:' . $e->getMessage());
$error = explode("\n", $e->getMessage())[1];
if ($error[strlen($error) - 1] != '}') {
$error = $error . '"}';
}
if (empty(json_decode($error))) return ['success' => false, 'message' => '服务器异常,请联系管理员'];
switch (json_decode($error)->error) {
case 'invalid_grant':
$errorMessage = '用户名或密码错误!';
break;
case 'invalid_client':
case 'invalid_request':
$errorMessage = '客户端出错,请重新下载!';
break;
default:
$errorMessage = '未知错误,请联系管理员!';
break;
}
return ['success' => false, 'message' => $errorMessage];
}
$token = json_decode((string)$result->getBody(), true)['access_token'];
return ['status' => true, 'token' => $token];
}
- 更改登录字段
在用户模型添加
// 自定义授权用户名(默认为登录账号)
public function findForPassport($username)
{
return Admin::where('tel', $username)->first();
// 也可以使用多字段登录
return Admin::where('tel', $username)->orWhere('name', $username)->first();
}
- 如果你的用户表是使用的guid
请使用migrate文件修改 possport 表字段, 在之前,请安装 doctrine/dbal 拓展
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: