转换授权码以在laravel中访问令牌不起作用

时间:2017-10-31 09:51:43

标签: php laravel api guzzle laravel-passport

我正在使用laravel护照创建oauth。

use Illuminate\Http\Request;
Route::get('/redirect', function () {
    $query = http_build_query([
        'client_id' => '3',
        'redirect_uri' => 'http://127.0.0.1:8000/auth/callback',
        'response_type' => 'code',
        'scope' => '',
    ]);

    return redirect('http://127.0.0.1:8000/oauth/authorize?'.$query);
});
Route::get('/auth/callback', function (Request $request) {
    $http = new \GuzzleHttp\Client;
    $response = $http->post('http://127.0.0.1:8000/oauth/token', [
        'form_params' => [
            'grant_type' => 'authorization_code',
            'client_id' => '3',
            'client_secret' => 'client_secret',
            'redirect_uri' => 'http://127.0.0.1:8000/auth/callback',
            'code' => $request->code,
        ],
    ]);

    return json_decode((string) $response->getBody(), true);
});

此处重定向授权是成功的,并且在使用Guzzle转换授权代码访问令牌时,页面将继续加载而不返回任何响应。 即使在内部使用CURL也会返回false。但是当从post man或CURL尝试从不同的目的地时,它返回有效数据。它是framwork / package bug吗?

2 个答案:

答案 0 :(得分:2)

不要使用GuzzleHttp

使用此代码:

$request->request->add([
      'username' => $request->email,
      'password' => $request->password,
        'grant_type' => 'password',
        'client_id' => '2',
        'client_secret' => 'GT6IA4aasdasdBhgrPvxHkGeXBasdasdST5F',
        'scope' => ''
    ]);

    $tokenRequest = Request::create(
        url('oauth/token'),
        'post'
    );
    $response = Route::dispatch($tokenRequest);

并且不要忘记将其添加到顶部

use Illuminate\Support\Facades\Route;

答案 1 :(得分:1)

可能您在PHP的集成Web服务器上运行代码。如果是,那么它不会起作用,因为它能够同时处理一个请求。因此,如果您从本地脚本向另一个本地脚本执行HTTP请求......那么您就会遇到死锁。

尝试在本地运行PHP-FPM。