Laravel 社交名流在请求中随机缺少“代码”

问题描述 投票:0回答:1

我在我的项目中使用 Laravel Socialite 进行谷歌登录。

    public function handleProviderCallback(): RedirectResponse
    {
       $provider = Socialite::driver('google')->scopes(['openid', 'email']);
       $provider->redirectUrl(URL('oauth/google/callback'));
       $oAuthUser = $provider->stateless()->user();

上述方法在大多数情况下都可以正常工作,但偶尔我会遇到错误

客户端错误:

POST https://www.googleapis.com/oauth2/v4/token
导致
400 Bad Request
响应:{“error”:“invalid_request”,“error_description”:“缺少必需的参数:代码”}

我无法在本地重现此内容。请我弄清楚如何解决这个问题?

->scopes(['openid', 'email'])

后来添加来修复此问题,但未能修复。

laravel authentication
1个回答
0
投票

出现此问题的原因可能有多种。潜在原因包括:

  • 间歇性网络中断可能会阻止授权 代码无法正确传输。
  • 用户会话在重定向和回调之间丢失或过期的会话问题(这可能导致授权代码无法正确存储或检索)。
  • OAuth2中用于防止CSRF攻击的state参数可能无法正确处理,导致请求无效。
  • OAuth 过程中的多次重定向可能会导致授权代码丢失。

尝试修改代码并添加日志消息以获取有关该过程的更多信息:

public function handleProviderCallback(): RedirectResponse
{
    try {
        Log::info('Starting Google OAuth process');
        $provider = Socialite::driver('google')->scopes(['openid', 'email']);
        $provider->redirectUrl(URL('oauth/google/callback'));
        $oAuthUser = $provider->stateless()->user();
        Log::info('Received callback from Google', ['user' => $oAuthUser]);

        // Your existing code to handle the user
    } catch (\Exception $e) {
        Log::error('Error during Google OAuth process', ['error' => $e->getMessage()]);
        return redirect('/login')->withErrors('Google login failed, please try again.');
    }
}

此外,检查存储会话的配置是否正确(https://laravel.com/docs/11.x/session)。

© www.soinside.com 2019 - 2024. All rights reserved.