微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 guzzlehttp Laravel php 中使用令牌进行授权

如何解决在 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 举报,一经查实,本站将立刻删除。