我想用
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#
您看到方法
handleGoogleCallback()
,这意味着谷歌服务器需要能够直接联系您的服务器。
您应该知道,从您自己的计算机外部无法访问像
http://localhost:8000
这样的链接。
要使其工作,您需要对路由器进行一些摆弄,并使用您的外部 IP 作为服务器域
或
使用NOIP解决方案来获取临时可访问的域。 (仍然需要一些摆弄才能打开所需的端口)。
你必须删除这个
http://localhost:8000
并使用正确的域名,你应该首先在你的网站上运行,然后你可以进行谷歌身份验证。
查看上面列出的所有结果,访问错误的识别没有用于诊断站点连接故障的匹配协议。以下完整转发链接的回复是:我会问一个问题;用于诊断堆栈溢出中的 crcache 和 {crbug} 的工具在哪里?
(500 Server error)