获取没有http请求Laravel护照的密码授予令牌

时间:2017-02-20 11:04:48

标签: laravel-5 oauth-2.0 laravel-passport

我正在使用Laravel 5.4(护照)开发REST API。

我希望用户在注册时获取访问令牌,而无需再发出其他http请求。 我已经完整的Laravel文档。但没有直接的方法来获取访问令牌。类似的东西: -

$token = $user->getOathToken($user_id);

password grant token

的护照文档

在文档中,他们提供了类似的内容:

    $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请求。有什么方法可以避免吗?

2 个答案:

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

}