如何解决在 guzzlehttp Laravel php 中使用令牌进行授权
我正在尝试使用 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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。