- 在开始之前,请通过 Composer 包管理器安装 Passport:
composer require laravel/passport
- Passport 服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行 Passport的迁移命令来自动创建存储客户端和令牌的数据表:
php artisan migrate
- 接下来,运行 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查看数据
- 接下来我们打开Postman,请求方式选择POST,修改地址:
http://……/oauth/token
,将所有参数都放在Body中,点击Send,获取token:
- 然后我们复制access_token创建一个环境变量:
- 我们将token带入到Headers里,就可以获取用户信息:
扩展
我们希望当用户注册成功之后返回token
- 首先我们安装guzzle辅助包:
composer require "guzzlehttp/guzzle"
-
接下来打开
app\Http\Controllers\RegisterController
创建一个内部的成员变量:private $http
; -
然后我们创造一个构造函数:
use GuzzleHttp\Client as Guzzle;
public function __construct(Guzzle $http)
{
$this->http = $http;
}
- 请求用户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);
- 最后整合注册代码:
<?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);
}
}
- 我们用postman来测试一下,可以看到用户注册返回token:
至此我们已经完成了用户的登录认证