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

无法使用谷歌一键登录按钮登录社交名流

如何解决无法使用谷歌一键登录按钮登录社交名流

我尝试了几乎所有可能的方法,但 Google One Tap 登录按钮在我的 Laravel 8 应用程序中返回 504 错误。我正在使用 laravel socialite 来处理登录过程,如果我放置一个链接按钮而不是 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 Method Not Allowed”。 东西坏了。请让我们知道发生此错误时您在做什么。我们会尽快修复它。给您带来的不便,敬请谅解。

解决方法

来自 Google one tab 的响应是 post not get request

,

我研究了@Mohamed ِRadwan 提供的解决方案,并更新了我的社交名流路线文件,如下所示:

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','callback']);
});

});

这使得 One Tap 提示可以根据社交名流的需要工作,但登录按钮仍然不起作用并抛出 419(意味着页面过期 - 由于 csrf 令牌不匹配)令人惊讶我按照这篇文章发送了 csrf 令牌:

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 以选择帐户,这里是 csrf 令牌过期的地方。

所以我在我的 VerifyCsrfToken.php 中间件中关闭了 google socialite 路由的 csrf 验证,如下所示:

 protected $except = [
    'login/google',];

瞧,它奏效了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?