我正在使用Laravel 6.7,并try 使用Passport进行用户身份验证.

我可以在用户注册时为他们创建一个访问令牌.以下是代码:

$user = User::create($input);
$user->createToken('auth-token');

正如我在AuthServiceProvider.php file boot()函数中定义的,该访问令牌的过期时间为15分钟,如下所示:

Passport::personalAccessTokensExpireIn(Carbon::now()->addMinutes(15));

我想用刷新令牌刷新它,但似乎不明白怎么做.

我找遍了所有地方(包括Laravel网站),他们都告诉我要这样做:

$http = new GuzzleHttp\Client;

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'refresh_token',
        'refresh_token' => 'the-refresh-token',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'scope' => '',
    ],
]);

没有任何关于值'the-refresh-token''client-id''client-secret'的明确解释.

一个answer-on-stack overflow表示:

必须发送旧的刷新令牌('refresh_token' => 'the-refresh-token'),此代码将生成一个新令牌并刷新.

但我没有刷新令牌,我正在try 创建一个.我只是创建一个随机字符串吗?

推荐答案

使用密码授权令牌

From: 100

OAuth2密码授权允许您的其他第一方客户端(如移动应用程序)使用邮箱地址/用户名和密码获取访问令牌.

First you need to generate a Password Grant Client by:

php artisan passport:client --password

这会给你client_id分和client_secret

So next you can implement your login in your Mobile app as follow:

POST
http://your-app.com/oauth/token

Body:
{
  'grant_type' => 'password',
  'client_id' => 'client-id',
  'client_secret' => 'client-secret',
  'username' => 'taylor@laravel.com',
  'password' => 'my-password',
  'scope' => '',
}

其结果是:

{
  "token_type": "Bearer",
  "expires_in": 300,
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjAyMGM1YTQ2MzM5ZTAxNjBjODViOWUyMGE0YTAxYzhmOWYzOTZkYjlhMmM1OWZiNjk0NDVjZTZlYTIyMmUyZmEyNDZmYzQ0MTc4M2NjNjIyIn0.eyJhdWQiOiI1MSIsImp0aSI6IjAyMGM1YTQ2MzM5ZTAxNjBjODViOWUyMGE0YTAxYzhmOWYzOTZkYjlhMmM1OWZiNjk0NDVjZTZlYTIyMmUyZmEyNDZmYzQ0MTc4M2NjNjIyIiwiaWF0IjoxNTczMjIxMTk0LCJuYmYiOjE1NzMyMjExOTQsImV4cCI6MTU3MzIyMTQ5NCwic3ViIjoiNWZhNzNkNjAtYzliNC0xMWU5LThiMDEtNjFmNDI4YjYyNTdiIiwic2NvcGVzIjpbXX0.EmmKwdr_tLUmN08MxnleCqIU0zDk8-pyecOaz-tQ2OBZa-UBsFe2SoaD0jqq_0t1BZHBiayO5qHFY6M459mXTPRNJM8Bx7MC1X_4GPHrozKMuymZ3Ham3J00UtsGHcF2gG39YcUnmhbDhiFefO8VGU-2e_2q2qWAFvO_lUB4CrcrVQ3o8-4o3mwXpmWbcoDbqiQwga_0-SMo8gYIFlh4OaO0Z_bCWsJaspUdRra672BV49une5uPlANLIinCthFHgcT_9t48z_wOzEHbVhuogMr5ObkJAy0rXTQLyvprale5EaNTPR0s9Fp1wvMtd08m7Pbdz2XLCShuIrE7cY8U8NZydxvX3aFqUOcqkmlvEGRkr3B6utjNQW19I7bKw9aIBBczoCCBmIqkqBuQFQziV3dQ7qQYJyKqr0n_mSyVzCllJ4nhWcV4hwny2KVQoszxjVMoVEzWEXsJSmxfWE4NHMYb0wmid6K_COCGzHRhfqtg_llySP_w2N0us2Ri92LyVovIJI0w2_ze0MBmyvS37OYIOLV3bCZcsVhnf9QCxAE6NAXXwgzYEj7Y0Q-7GkbOCDWrVghih3-engZj36dTBo_i4YJc5iygRlzLCW8AFtZig6mW6Veb9ITsSu_yTefCbZVPG4G0MjBhk03kSnLJGeyWeEAIBapdeEI7Vf8VsXo",
  "refresh_token": "def50200a4c2c3670e62fe28d61c38b66f0d4d85f5a576c0a3914cf9767d91027102bd9ab0a17e9e149266be2443f6ef2c25e092d4c17d2a813ca59b1df608dcfc120596c2ed72ffe7dd0a1db3bc7511ec905a65c63551239581a1c13c3c0b53fd0f8db97d2b49763f5bd98b7624a432d7e82161cc9e543d3e2550f73d6bcea0014aa0d4f72c2eb3edfe2f256fae1a8ea69270735be98a85b7040e33194eb449187b67aa0dbb10f75bdf620b6416c12756e96449e92aa6ad7b56be53876113a9d17d93c1039f54647040ce8acd7f242684d0b0aa1835267dbc6bab87c6b2a7862ca3bcd8396ae7c912b03ee3df7d471f74b96d0c48ec76a55ff05762227722ffb99ecb12f30fae9042b078383678492ef73e5fedfb0085a30a9511bc94588edd5a171e0650a092bb9c37e7571aeb6d0b6d9048189ab0fa16d48477e6d51e81efbe762af34c46ed2da1862528c24d00f0139f3e74eccbefd06a7dd238ccff85b9cbec68e2e7483a9fb2f4bc314d81d48f3dbbe0a9c8b42bd76bc4ad57fa2afad52092c5339f9461"
}

If you want to refresh an expired token you will do a request to /oauth/tokenPOST方法

还有身体:

{
  'grant_type' => 'refresh_token',
  'refresh_token' => 'the-refresh-token',
  'client_id' => 'client-id',
  'client_secret' => 'client-secret',
  'scope' => '',
} 

把之前的refresh_tokenclient_idclient_secretyou will get another response containing other tokens

Laravel相关问答推荐

spatie 包 laravel-tags 在迁移中没有 down() 函数是有原因的吗

Laravel phpunit 测试失败并出现 PDOException:SQLSTATE[HY000]:一般错误:1 接近0:语法错误

使用 App::environment() 与 app()->environment() 与 config('app.env') 之间的区别

laravel Eloquent 模型更新事件未触发

Laravel 5.4 LengthAwarePaginator

Laravel:如何在没有数据库的情况下对用户进行身份验证

使用'with'时,Laravel belongsTo 返回 null

使用限制排队 Guzzle 请求

带有时间戳的 Laravel 5.1 eloquent::attach() 方法

如何更改 ember-cli 中的 dist 文件夹路径?

如何从不是控制器方法的方法发送响应?

在Lumen框架中启用会话

Laravel Eloquent 模型中的字段

Laravel / Eloquent内存泄漏重复检索相同的记录

Laravel 搜索关系

如何在 Laravel 或 Redis 中取消排队的作业(job)

laravel 队列 - 同步驱动程序如何工作?它是在单独的进程/线程还是主执行线程中执行?

如何在 Eloquent Orm 中实现自引用(parent_id)模型

Laravel 5 Illuminate\Http\Request 的方法不允许静态调用

count() 参数必须是数组或在 laravel 中实现可数的对象