我正在使用使用Passport进行身份验证的Laravel 5.5版。
我已经成功创建了令牌,并且可以使用auth:api
中间件对其进行访问。
但是,每当用户登录系统时,它都会为该用户创建新令牌。我只想刷新用户的最后一个令牌并将其发回,而不是创建一个新的令牌。
我已使用以下代码生成身份验证令牌
$token = $user->createToken('string-'.$user->id)->accessToken;
它生成具有1075个字符的令牌,但是当我在数据库表oauth_access_tokens
中签入时,它向我显示了具有80个字符的令牌。
如何使用80个字符的令牌获取最后生成的令牌并刷新并将其发送回去?
预先感谢
答案 0 :(得分:3)
如果您的应用程序发布了短暂的访问令牌,则用户将需要通过颁发访问令牌时提供给他们的刷新令牌来刷新其访问令牌。在此示例中,我们将使用Guzzle HTTP库刷新令牌:
$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' => '',
],
]);
return json_decode((string) $response->getBody(), true);
此/oauth/token
路由将返回一个包含access_token,refresh_token
和expires_in
属性的JSON响应。 expires_in属性包含访问令牌过期之前的秒数。
答案 1 :(得分:0)
我已经做了类似的事情。
为授权刷新令牌创建了端点。 在我的控制器中,
public function userRefreshToken(Request $request)
{
$client = DB::table('oauth_clients')
->where('password_client', true)
->first();
$data = [
'grant_type' => 'refresh_token',
'refresh_token' => $request->refresh_token,
'client_id' => $client->id,
'client_secret' => $client->secret,
'scope' => ''
];
$request = Request::create('/oauth/token', 'POST', $data);
$content = json_decode(app()->handle($request)->getContent());
return response()->json([
'error' => false,
'data' => [
'meta' => [
'token' => $content->access_token,
'refresh_token' => $content->refresh_token,
'type' => 'Bearer'
]
]
], Response::HTTP_OK);
}