问题描述
我正在尝试使用 laravel 中的 GuzzleHttp 向我的另一个端点发出请求,但令牌未对其进行授权。我相信这是我要走的路。有人知道怎么修这个东西吗?这是我的代码。
public function productRecommendation($rowPerPage,$keywords,$page){
try{
$request = request();
$token = $request->bearerToken();
$client = new \GuzzleHttp\Client();
$promise = $client->request('GET',$this->sellerUrl.'recommended',[
'headers' => ['Authorization' => "Bearer {$token}"],'query' =>
[
'rowPerPage' => $rowPerPage,'page' => $page,'keywords' => $keywords,],]);
$response = (string) $promise->getBody();
return json_decode($response,true);
}
catch (Exception $e){
return $e;
}
}
解决方法
您正在使用 $request->bearerToken()
获取您的第一个应用程序的不记名令牌,并将其发送到您的第二个应用程序进行授权,这肯定不起作用;
您需要从您的第二个应用程序中获取工作令牌。您可以在第二个应用程序中生成令牌并将其复制到当前的 $token
变量中,或者首先使用您的凭据调用第二个应用程序的 login
端点并使用该令牌。
顺便说一下,Laravel 现在支持一个名为 Illuminate\Support\Facades\Http
的 guzzle 包装器,这使事情变得容易多了,您可以像这样重写代码:
public function productRecommendation($rowPerPage,$keywords,$page)
{
try{
$token = "some valid token from second endpoint";
$response = Http::withToken(
$token
)->get(
$this->sellerUrl . 'recommended',[
'rowPerPage' => $rowPerPage,'page' => $page,'keywords' => $keywords,]
);
return response()->json(
json_decode($response->body(),true)
);
}
catch (Exception $e){
return $e;
}
}