首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用google进行身份验证不起作用,重定向到404未找到

使用google进行身份验证不起作用,重定向到404未找到
EN

Stack Overflow用户
提问于 2021-07-26 18:07:01
回答 2查看 111关注 0票数 0

我想使用gmail登录,我创建了laravel身份验证,我使用谷歌添加了按钮登录,我通过命令composer require laravel/socialite安装了laravel社交软件包,我在config/services:中添加了配置

代码语言:javascript
复制
'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中添加了路由:

代码语言:javascript
复制
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']);

我输入了“用谷歌登录”的网址:

代码语言:javascript
复制
<a href="{{ route('login.google') }}" class="btn btn-danger btn-block">login with Google</a>

我将id和变量密钥放在.env文件中:

代码语言:javascript
复制
GOOGLE_CLIENT_ID="759714452408-gcbbdff9d7tp6215vgla9qhvrf60juh8.apps.googleusercontent.com"
GOOGLE_CLIENT_SECRET="ZKgJSqgibBNcHzD9vAMB80cw"

我在loginController中创建了_registerOrLoginUser函数

代码语言:javascript
复制
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“。

代码语言:javascript
复制
 public function redirectToGoogle () {
            return Socialite :: driver ('google') -> redirect ();
        }
        public function handleGoogleCallback () {
            $ user = Socialite :: driver ('google') -> user ();
            $ this -> _ registerOrLoginUser ($ user);
            return redirect () -> route ('home');
        }

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

database/table用户迁移:

代码语言:javascript
复制
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,它的链接是:

代码语言:javascript
复制
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#
EN

回答 2

Stack Overflow用户

发布于 2021-07-26 18:17:25

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

您应该知道,无法从您自己的计算机外部访问像http://localhost:8000这样的链接。

要使其正常工作,您需要对路由器进行一些调整,并使用外部IP作为服务器域

使用NOIP解决方案获取临时可达域。(在打开所需端口的过程中仍然会有一些麻烦)。

票数 0
EN

Stack Overflow用户

发布于 2021-07-26 18:26:24

你必须删除这个http://localhost:8000,并使用适当的域名,你应该首先住你的网站,然后你可以使谷歌认证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68528000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档