我想用gmail登录,我创建了laravel认证,我用google添加了按钮登录,我安装了laravel软件包,我通过命令编写器需要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>我在.env文件中添加了id和变量键:
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。
数据库/表用户迁移:
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 ();
});
}最后,当我单击"login with google"按钮时,它会打开gmail并选择我的帐户,它会给我带来错误:cURL error 77: error setting certificate verify locations。甚至我已经下载了cacert.pem文件并将其复制到根D:\wamp\bin\php \php7.3.5\extras\ssl,并修改了php.ini。
我发现解决方案是禁用guzzle,因此添加以下代码:
$user->get('/url', ['verify' => false]);但我不知道在哪里。
发布于 2022-05-30 10:19:26
为了回答您的问题,您的本地开发环境没有提供SSL证书。根据您的设置,您可以配置它,但是在开发期间简单地忽略它确实更容易,正如您所建议的那样。你离解决方案很近。下面是如何配置它的方法。我只是应用它,如果网站没有服务在一个生产环境。
public function handleGoogleCallback () {
if (app()->environment('local')) {
$user = Socialite::driver('google')
->setHttpClient(new \GuzzleHttp\Client(['verify' => false]))
->user();
} else {
$user = Socialite::driver('google')->user();
}
$this->_registerOrLoginUser($user);
return redirect()->route('home');
}此外,在定义重定向URL时,可以将其指定为相对URL,这样它就不会硬编码本地URL结构。
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => '/laravel/socialite/public/login/google/callback',
],在Google控制台中,您可以编辑OAuth凭据并列出任意数量的允许重定向URL。只需添加一个域名,您将服务您的网站将从。由于重定向是在浏览器中本地发生的,所以添加代理域或localhost可以正常工作。只要您的本地系统被配置为解析地址,它就会在OAuth流中返回给浏览器。
https://stackoverflow.com/questions/68574324
复制相似问题