与谷歌验证它不起作用它重定向到404未找到

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

我想用

gmail
登录,我创建laravel身份验证,我添加使用google登录的按钮,我通过命令安装laravel社交包
composer require laravel/socialite
,我在
config/services:

中添加配置
'google' => [
    'client_id' => env('GOOGLE_CLIENT_ID'),
    'client_secret' => env('GOOGLE_CLIENT_SECRET'),
    'redirect' => 'http://localhost:8000/laravel-socialite/public/login/google/callback',
    ],

我在

routes/web.php
中添加了路线:

Route::get ('login/google',[App\Http\Controllers\Auth\LoginController::class, 'redirectToGoogle'])->name('login.google');
Route::get('login/google/callback',[App\Http\Controllers\Auth\LoginController::class,'handleGoogleCallback']);

我输入按钮“使用谷歌登录”网址:

<a href="{{ route('login.google') }}" class="btn btn-danger btn-block">login with Google</a>

我将 id 和变量 key 放入

.env
文件中:

GOOGLE_CLIENT_ID="759714452408-gcbbdff9d7tp6215vgla9qhvrf60juh8.apps.googleusercontent.com"
GOOGLE_CLIENT_SECRET="ZKgJSqgibBNcHzD9vAMB80cw"

我在

_registerOrLoginUser
中创建了
loginController
函数:

protected function _registerOrLoginUser ($ data)
    {
        $ user = User :: where ('email', '=', $ data-> email) -> first ();
        if (! $ user) {
            $ user = new User ();
            $ user-> name = $ data-> name;
            $ user-> email = $ data-> email;
            $ user-> provider_id = $ data-> provider_id;
            $ user-> avatar = $ data-> avatar;
            $ user-> save ();
        }
        Auth :: login ($ user);
    }

我在

LoginController.php
中添加了这两个函数,并调用了
_registerOrLoginUser
函数并重定向到“
home
”。

 public function redirectToGoogle () {
            return Socialite :: driver ('google') -> redirect ();
        }
        public function handleGoogleCallback () {
            $ user = Socialite :: driver ('google') -> user ();
            $ this -> _ registerOrLoginUser ($ user);
            return redirect () -> route ('home');
        }

我创建了谷歌应用程序来获取 id 和 sercret。

database/table
用户迁移:

public function up ()
    {
        Schema :: create ('users', function (Blueprint $ table) {
            $ table-> id ();
            $ table-> string ('name');
            $ table-> string ('email');
            $ table-> timestamp ('email_verified_at') -> nullable ();
            $ table-> string ('password');
            $ table-> string ('provider_id') -> nullable ();
            $ table-> string ('avatar') -> nullable ();
            $ table-> rememberToken ();
            $ table-> timestamps ();
        });
    }

最后,当我点击“使用谷歌登录”按钮时,它会打开

gmail
,然后我选择我的帐户,它会重定向到
404 NOT FOUND
,其链接:

http://localhost:8000/laravel-socialite/public/login/google/callback?state=zeKKpMpBltK1KYyaqiCM55ii0FjNj6KN03e23eiN&code=4%2F0AX4XfWj3m2DoJOXwolKO0ANQOa8CMW8fCx_5ASs1eYT5_NNqDFO0m_5Fn6OIOmyA0o2Rcg&scope=email+profile+openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&authuser=0&prompt=consent#
php laravel authentication google-authentication
3个回答
0
投票

您看到方法

handleGoogleCallback()
,这意味着谷歌服务器需要能够直接联系您的服务器。

您应该知道,从您自己的计算机外部无法访问像

http://localhost:8000
这样的链接。

要使其工作,您需要对路由器进行一些摆弄,并使用您的外部 IP 作为服务器域

使用NOIP解决方案来获取临时可访问的域。 (仍然需要一些摆弄才能打开所需的端口)。


0
投票

你必须删除这个

http://localhost:8000
并使用正确的域名,你应该首先在你的网站上运行,然后你可以进行谷歌身份验证。


0
投票

查看上面列出的所有结果,访问错误的识别没有用于诊断站点连接故障的匹配协议。以下完整转发链接的回复是:我会问一个问题;用于诊断堆栈溢出中的 crcache 和 {crbug} 的工具在哪里?

     (500 Server error) 

https://api.jarvi.io/oauth/callback-google?state=&code=4%2F0ATx3LY7_3DaxZnvcqR1OPVs8nD4b1a6xyaoGHhZXa8kityGQkLa6YJdWpaysJwL2ei_PQQ&scope=email+profile+openid+https%3A%2F%2Fwww.googleapis.com%2Fauth %2Fuserinfo.profile+ https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&authuser=0&prompt=consent

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