Laravel Cors在尝试运行Request :: create时抛出错误

时间:2019-09-16 13:20:01

标签: laravel cors laravel-passport

我有一个Laravel Passport API的自定义登录方法。

我正在使用Request::create从我的登录方法内部调用/ oauth / token端点。

问题是我的React项目中出现了CORS错误。

该错误仅在使用登录方法时发生,我认为我已将其追溯至“返回”数据的方式

我正在使用barryvdh/laravel-cors软件包,并且登录方法的相关部分如下;

    $data = [
        'grant_type' => 'password',
        'client_id' => 2,
        'client_secret' => 'ggdfgdvsreckuscenusekubsvbd',
        'username' => $request->email,
        'password' => $request->password,
        'scope' => '',
    ];

    $request = Request::create('/oauth/token', 'POST', $data);

    return app()->handle($request);

有没有一种方法可以将$ request响应强制转换为变量,然后使用标准的response->json返回它?

如果我按原样返回$ request,它不会给我任何return app()->handle($request);行给我的数据,即令牌,刷新令牌等

我可以在我的API中使用除此方法以外的所有其他POST方法。

2 个答案:

答案 0 :(得分:1)

您可以这样尝试。它基本上是从另一个请求中启动一个新请求

$data = [
        'grant_type' => 'password',
        'client_id' => 2,
        'client_secret' => 'ggdfgdvsreckuscenusekubsvbd',
        'username' => $request->email,
        'password' => $request->password,
        'scope' => '',
    ];

$request = app()->make('request');
$request->request->add($data);

$tokenRequest = Request::create(
            env('APP_URL') . '/oauth/token',
            'post'
        );

return Route::dispatch($tokenRequest);

答案 1 :(得分:0)

调度路由并在内部处理响应,而不是返回不同的标头

protected function attemptLogin(Request $request)
{
    // forward the request to the oauth token request endpoint
    $res = Route::dispatch(request()->create('oauth/token', 'POST', $data));
    // Return true or false based on response status code
    return $res->getStatusCode() === 200 ? true : false;
}