使用 Laravel 社会名流用户 returns 失踪 authorization_code

Use Laravel Socialite user returns missing authorization_code

我正在使用 Laravel Socialite 登录 SuperOffice API。刚刚将提供程序添加为 pr 但已经对其进行了测试。我在本地和正在创建的包 superoffice-api 中使用提供程序 superoffice。已将两个包添加到 Laravel 应用中的 composer.json:

"repositories": [
     {
         "type": "path",
         "url": "./packages/superoffice-api"
     },
     {
        "type": "path",
        "url": "./packages/superoffice"
     }
]

同样在superoffice-apicomposer.json中添加了superoffice社会名流提供者。

登录过程正常,但在尝试使用该用户进行其他 API 调用时出现问题。我的意思是在回调中我可以执行以下操作:

public function superofficeCallback(Request $request): RedirectResponse
{
     $user = Socialite::driver('superoffice')->stateless()->user();

     return redirect()->route('dashboard.index')->with([
         'message' => 'Loggedin with SuperOffice as '.$user->name,
         'success' => true,
      ]);
}

这显示了预期的 $user->name。现在,当尝试在 superoffice-api 包中调用 Socialite::driver('superoffice')->stateless()->user() 时,我收到以下错误消息:

GuzzleHttp\Exception\ClientException: Client error: POST https://sod.superoffice.com/login/common/oauth/tokens resulted in a 400 Bad Request response: { "error": "invalid_request", "error_description": "missing authorization_code"}

无论是在方法中调用还是在 class 的 __construct() 中调用都没关系。

所以我的问题是如何在包 superoffice-api 中使用 Socialite 提供商 superoffice 用户?这是获得 access_token 所必需的。可以想象,由于在包中调用了 Socialite,因此缺少某种引用。

这里的问题是 access_tokenrefresh_token 需要以其他方式存储在回调函数中。例如,当存储在数据库中时,您可以在任何地方使用令牌。