我正在使用Laravel 5.4(护照)开发REST API。
我希望用户在注册时获取访问令牌,而无需再发出其他http请求。 我已经完整的Laravel文档。但没有直接的方法来获取访问令牌。类似的东西: -
$token = $user->getOathToken($user_id);
的护照文档
在文档中,他们提供了类似的内容:
$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);
我不想再提出另一个http请求。有什么方法可以避免吗?
答案 0 :(得分:1)
没有一种方法可以用来做你想做的事情。你可以看看
\Laravel\Passport\Http\Controllers\AccessTokenController@issueToken
哪个是处理/oauth/token
路由的控制器方法。并且看看传递它所需的参数而不将其作为POST请求。
答案 1 :(得分:0)
经过研究,这是一门可以完成您想要的工作的课程
use Laravel\Passport\Http\Controllers\ConvertsPsrResponses;
use League\OAuth2\Server\AuthorizationServer;
use Zend\Diactoros\Response as Psr7Response;
use Zend\Diactoros\ServerRequest;
class TokenProvider
{
use ConvertsPsrResponses;
/**
* @var AuthorizationServer
*/
private $authServer;
public function __construct()
{
$this->authServer = resolve(AuthorizationServer::class);
}
public function getToken(string $email, string $password)
{
$data = [
'grant_type' => 'password',
'client_id' => config('services.passport.client_id'),
'client_secret' => config('services.passport.client_secret'),
'username' => $email,
'password' => $password
];
$request = new ServerRequest($data);
$request = $request->withParsedBody($data);
$response = $this->convertResponse($this->authServer->respondToAccessTokenRequest($request,new Psr7Response));
return json_decode($response->content())->access_token;
}
}