1

我正在使用 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 请求。有什么办法可以避免吗?

4

2 回答 2

2

经过研究,这是一个可以完成您正在寻找的工作的课程

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;
    }

}
于 2019-08-26T13:45:11.267 回答
1

没有一种方法可以用来做你想做的事。你可以看看

\Laravel\Passport\Http\Controllers\AccessTokenController@issueToken

这是处理/oauth/token路由的控制器方法。并查看将所需的参数传递给它而不将其作为 POST 请求进行。

于 2017-02-21T15:16:24.240 回答