我正在使用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吗?
答案 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。