有没有一种方法可以在Laravel中包含Http/Guzle响应的数据



所以我试图通过登录请求返回User数据。我正在使用guzzle,我不知道如何将数据附加到响应中。

这是的登录方法

public function login(Request $request)
{
$http = new GuzzleHttpClient;
try {
$response = $http->post(config('services.passport.login_endpoint'), [
'form_params' => [
'grant_type' => 'password',
'client_id' => config('services.passport.client_id'),
'client_secret' => config('services.passport.client_secret'),
'username' => $request->username,
'password' => $request->password,
]
]);

return $response->getBody();
} catch (GuzzleHttpExceptionBadResponseException $e) {
if ($e->getCode() === 400) {
return response()->json('Invalid Request. Please enter a username or a password.', $e->getCode());
} else if ($e->getCode() === 401) {
return response()->json('Your credentials are incorrect. Please try again', $e->getCode());
}
return response()->json('Something went wrong on the server.', $e->getCode());
}
}

我想做一些类似的事情

$user = User::where('email', $request->username)->get();
$token = $response->getBody();
return response()->json($token, $user);

然而,当我尝试这样做时,我会出错。如有任何帮助,我们将不胜感激。目前,我必须在访问令牌后单独请求返回用户数据,因此我希望它能同时发生。。。。

json方法的第一个参数可以是数组:
return response()->json(['token' => $token, 'user' => $user ]);

建议我进行以下讨论,它解决了我的问题。这是的最终代码

public function login(Request $request)
{
$http = new GuzzleHttpClient;
try {
$response = $http->post(config('services.passport.login_endpoint'), [
'form_params' => [
'grant_type' => 'password',
'client_id' => config('services.passport.client_id'),
'client_secret' => config('services.passport.client_secret'),
'username' => $request->username,
'password' => $request->password,
]
]);
$token = $response->getBody();
$data = json_decode($token, true);
$user = User::where('email', $request->username)->with('role.rules')->get();
$rules = $user->pluck('role')->collapse()->pluck('rules');
$rules->put('access_token', $data['access_token']);
return response()->json($rules);
} catch (GuzzleHttpExceptionBadResponseException $e) {
if ($e->getCode() === 400) {
return response()->json('Invalid Request. Please enter a username or a password.', $e->getCode());
} else if ($e->getCode() === 401) {
return response()->json('Your credentials are incorrect. Please try again', $e->getCode());
}
return response()->json('Something went wrong on the server.', $e->getCode());
}
}

最新更新