无法使用 google 一键登录按钮登录社交名流
Unable to login to socialite using google one tap signin button
我几乎尝试了所有可能的方法,但 Google 一次点击登录按钮在我的 Laravel 8 应用程序中返回 504 错误。我正在使用 laravel 社交名流来处理登录过程,如果我放置一个 link 按钮而不是 Google 登录按钮,它绝对可以正常工作。
这是我的一键式按钮代码:
<div id="g_id_onload" data-client_id="{{ config('services.google.client_id') }}" data-context="signin" data-login_uri="{{ route('frontend.auth.social.login', 'google') }}" data-auto_prompt="true"></div>
<div class="g_id_signin" data-type="standard" data-shape="rectangular" data-theme="filled_blue" data-text="signin_with" data-size="large" data-logo_alignment="left"></div>
这是我遇到的错误:
糟糕!发生错误
服务器返回“405 方法不允许”。
东西坏了。请让我们知道发生此错误时您在做什么。我们会尽快修复它。对造成的不便深表歉意。
来自 Google 一个选项卡的响应是 post 未获得请求
我研究了@Mohamed ِRadwan 提供的解决方案并更新了我的 socialite 路由文件如下:
Route::group(['as' => 'auth.'], function () {
Route::group(['middleware' => 'guest'], function () {
// Socialite Routes
Route::any('login/{provider}', [SocialController::class, 'redirect'])->name('social.login');
Route::get('login/{provider}/callback', [SocialController::class, 'callback']);
});
});
这使得 One Tap 提示按 socialite 的要求工作,但登录按钮仍然不起作用并抛出 419(意味着页面已过期 - 由于 csrf 令牌不匹配)令人惊讶的是我正在发送 csrf根据这个 post:
How to handle google one tap with laravel csrf
这是我的登录按钮代码:
<div id="g_id_onload"
data-client_id="{{ config('services.google.client_id') }}"
data-context="signin"
data-ux_mode="redirect"
data-login_uri="{{ route('frontend.auth.social.login', 'google') }}"
data-_token="{{ csrf_token() }}"
data-auto_prompt="true">
</div>
<div class="g_id_signin"
data-type="standard"
data-shape="rectangular"
data-theme="filled_blue"
data-text="signin_with"
data-size="large"
data-logo_alignment="left">
</div>
似乎 csrf tken 已过期,因为按钮导航到 google uri 到 select 帐户,这里是 csrf 令牌过期的地方。
所以我在我的 VerifyCsrfToken.php 中间件中关闭了 google socialite 路由的 csrf 验证,如下所示:
protected $except = [
'login/google',
];
瞧,它成功了。
我几乎尝试了所有可能的方法,但 Google 一次点击登录按钮在我的 Laravel 8 应用程序中返回 504 错误。我正在使用 laravel 社交名流来处理登录过程,如果我放置一个 link 按钮而不是 Google 登录按钮,它绝对可以正常工作。
这是我的一键式按钮代码:
<div id="g_id_onload" data-client_id="{{ config('services.google.client_id') }}" data-context="signin" data-login_uri="{{ route('frontend.auth.social.login', 'google') }}" data-auto_prompt="true"></div>
<div class="g_id_signin" data-type="standard" data-shape="rectangular" data-theme="filled_blue" data-text="signin_with" data-size="large" data-logo_alignment="left"></div>
这是我遇到的错误:
糟糕!发生错误 服务器返回“405 方法不允许”。 东西坏了。请让我们知道发生此错误时您在做什么。我们会尽快修复它。对造成的不便深表歉意。
来自 Google 一个选项卡的响应是 post 未获得请求
我研究了@Mohamed ِRadwan 提供的解决方案并更新了我的 socialite 路由文件如下:
Route::group(['as' => 'auth.'], function () {
Route::group(['middleware' => 'guest'], function () {
// Socialite Routes
Route::any('login/{provider}', [SocialController::class, 'redirect'])->name('social.login');
Route::get('login/{provider}/callback', [SocialController::class, 'callback']);
});
});
这使得 One Tap 提示按 socialite 的要求工作,但登录按钮仍然不起作用并抛出 419(意味着页面已过期 - 由于 csrf 令牌不匹配)令人惊讶的是我正在发送 csrf根据这个 post:
How to handle google one tap with laravel csrf
这是我的登录按钮代码:
<div id="g_id_onload"
data-client_id="{{ config('services.google.client_id') }}"
data-context="signin"
data-ux_mode="redirect"
data-login_uri="{{ route('frontend.auth.social.login', 'google') }}"
data-_token="{{ csrf_token() }}"
data-auto_prompt="true">
</div>
<div class="g_id_signin"
data-type="standard"
data-shape="rectangular"
data-theme="filled_blue"
data-text="signin_with"
data-size="large"
data-logo_alignment="left">
</div>
似乎 csrf tken 已过期,因为按钮导航到 google uri 到 select 帐户,这里是 csrf 令牌过期的地方。
所以我在我的 VerifyCsrfToken.php 中间件中关闭了 google socialite 路由的 csrf 验证,如下所示:
protected $except = [
'login/google',
];
瞧,它成功了。