与谷歌的身份验证它不工作它重定向到404未找到

nmpmafwu  于 2021-09-29  发布在  Java
关注(0)|答案(3)|浏览(534)

我想使用登录 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']);

我输入了“使用谷歌登录”的url按钮:

login with Google

我把id和变量键放在 `.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');
}

我创建了google应用程序来获取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#

mrwjdhj3

mrwjdhj31#

你看到方法了吗 handleGoogleCallback() 这意味着谷歌服务器需要能够直接联系您的服务器。
你应该知道像这样的链接 http://localhost:8000 无法从您自己的计算机外部访问。
为了让它工作,你需要摆弄一下你的路由器,并使用你的外部ip作为服务器域

使用noip解决方案获取临时可访问域(还有一些需要打开的端口)。

czfnxgou

czfnxgou2#

你必须移除这个 http://localhost:8000 并且使用合适的域名,你应该先在你的网站上注册,然后你可以对谷歌进行认证。

wmtdaxz3

wmtdaxz33#

使用 auth()->guard('user')->loginUsingId($user->id, true) ```
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 ();
}
$objAuth = auth()->guard('user')->loginUsingId($user->id, true);
}

相关问题