如果我向http://localhost:8000
或http://127.0.0.1:8000
发出任何请求,则会挂起暂挂状态。 (正好在这里https://github.com/guzzle/guzzle/issues/1857)
我被告知这与guzzle无关,我最好在这里问一下。
我在跟随laravel.com/docs/5.4/passport
时偶然发现了这个问题这是挂起的代码:
$response = $http->post('http://your-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'redirect_uri' => 'http://example.com/callback',
'code' => $request->code,
],
]);
我尝试向工作API路径发出GET和POST请求(使用邮递员测试),并且在使用guzzle调用相同路由时仍然挂起。
那么有没有办法在使用php artisan serve
时向我自己的API发出请求?
答案 0 :(得分:4)
try this.
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Route;
use App\User;
class UserController extends Controller
{
//use AuthenticatesUsers;
protected function login(Request $request)
{
$request->request->add([
'grant_type' => 'password',
'client_id' => '3',
'client_secret' => '6BHCRpB4tpXnQvC1DmpT7CXCSz7ukdw7IeZofiKn',
'scope' => '*'
]);
// forward the request to the oauth token request endpoint
$tokenRequest = Request::create('/oauth/token','post');
return Route::dispatch($tokenRequest);
}
}
答案 1 :(得分:1)
我最终通过使用wamp virtualhost而不是php artisan serve来解决它。不知道为什么它不能与localhost一起使用。
我将标记为接受任何解释为什么会发生这种情况的答案,以及是否可以在此示例中使用php artisan服务器和guzzle。但是现在,wamp工作。
答案 2 :(得分:0)
卡尔对此有很好的解决方案。如果您正在寻找一种快速修复程序来测试您的更新-您可以通过打开两个命令提示符来完成此任务。第一个将运行php artisan serve
(本地默认端口为8000,并且您将在http://localhost:8000
上运行站点)。第二个将运行php artisan serve --port 8001
。
然后,您将发布请求更新为:
$response = $http->post('http://localhost:8001/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'redirect_uri' => 'http://example.com/callback',
'code' => $request->code,
],
]);
这应该在测试期间有所帮助,直到您能够访问服务器或本地虚拟主机上的所有内容为止。
答案 3 :(得分:0)
/**
* Login function
*/
public function login(Request $request) {
/*
Sample post object
{
"username": "test@gmail.com",
"password": "test123"
}
*/
if (Auth::attempt(['email' => request('username'), 'password' => request('password')])) {
return $this->getToken($request);
}
else {
return response()->json(['error'=>'Unauthorised'], 401);
}
}
public function getToken(Request $request) {
//Get client ID and client Secret
$client = DB::table('oauth_clients')->where('password_client',1)->first();
$request->request->add([
"grant_type" => "password",
"username" => $request->username,
"password" => $request->password,
"client_id" => $client->id,
"client_secret" => $client->secret,
]);
// Post to "/oauth/token
$tokenRequest = $request->create('/oauth/token','post');
$instance = Route::dispatch($tokenRequest);
//return token_type, expires_in, access_token, refresh_token
return response()->json(json_decode($instance->getContent()));
}