我想用 gmail 登录,我创建 laravel 身份验证,我用 google 添加按钮登录,我通过命令 composer require laravel/socialite 安装 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 和变量键放在 .env 文件中:GOOGLE_CLIENT_ID="759714452408-gcbbdff9d7tp6215vgla9qhvrf60juh8.apps.googleusercontent.com"
GOOGLE_CLIENT_SECRET="ZKgJSqgibBNcHzD9vAMB80cw"
我在 loginController 中创建了 _registerOrLoginUser 函数: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。数据库/表用户迁移:
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 ssl,所以添加代码:
$user->get('/url', ['verify' => false]);
但我不知道在哪里。
最佳答案
要回答您的问题,您的本地开发环境没有提供 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 Cloud Console 中,您可以编辑 OAuth 凭据并列出任意数量的允许重定向 URL。只需为您将为其提供网站服务的每个域添加一个。由于重定向发生在浏览器本地,添加代理域或本地主机就可以了。只要您的本地系统配置为解析地址,它就会在 OAuth 流程中返回给浏览器。
关于php - 如何禁用 guzzle ssl 验证 laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68574324/