php - 如何禁用 guzzle ssl 验证 laravel

标签 php laravel ssl ssl-certificate

我想用 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/

相关文章:

Java SSL/TLS 版本设置

ssl - 启用节点间加密后,Cassandra 节点无法相互看到

ssl - 密码学中有哪些不同的证书类型和格式

javascript - 使用 PHP 或 JavaScript 在多个域上设置 cookie

php - 每次在 Laravel 中更改状态时发送 Slack 通知

mysql - 比较时间戳和 Carbon::now()->toTimeString()(不带秒)

php - laravel 表单请求 = 如果按钮被点击

php - Codeigniter: header 已发送错误

java - 对于 (字符串 s : letters) {JAVA} How is this in php? 对于 ($string_l1 : $array){PHP}?

php - 当服务器发送的事件运行时,带有 session_start() 的页面不会加载