3

ソーシャルライト経由の Google oauth ログインに問題があります。現在ローカルで運用されているアプリを GAE に移行しています。

Laravel 5.1 の shpasser gae パッケージを使用していますが、正しく機能しています。最初のログイン リクエストでは、Google の許可画面が正常に表示されますが、コールバックで curl エラーが発生します。

cURL error 7: (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
in CurlFactory.php line 168
at CurlFactory::createRejection(object(EasyHandle), array('errno' => '7', 'error' => '', 'url' => 'https://accounts.google.com/o/oauth2/token', 'content_type' => null, 'http_code' => '0', 'header_size' => '0', 'request_size' => '0', 'filetime' => '-1', 'ssl_verify_result' => '0', 'redirect_count' => '0', 'total_time' => '0', 'namelookup_time' => '0.080153', 'connect_time' => '0', 'pretransfer_time' => '0', 'size_upload' => '0', 'size_download' => '0', 'speed_download' => '0', 'speed_upload' => '0', 'download_content_length' => '-1', 'upload_content_length' => '-1', 'starttransfer_time' => '0', 'redirect_time' => '0', 'redirect_url' => '', 'primary_ip' => '', 'certinfo' => array(), 'primary_port' => '0', 'local_ip' => '', 'local_port' => '0')) in CurlFactory.php line 132

Laravelが使用するGuzzleパッケージの証明書の場所をこれに変更してみました

 final public function setSslVerification($certificateAuthority = true, $verifyPeer = true, $verifyHost = 2)
    {
        $opts = $this->config[self::CURL_OPTIONS] ?: array();

        if ($certificateAuthority === true) {
            // use bundled CA bundle, set secure defaults
            $opts[CURLOPT_CAINFO] = __DIR__ . '/etc/ca-certificates.crt';
            $opts[CURLOPT_SSL_VERIFYPEER] = true;
            $opts[CURLOPT_SSL_VERIFYHOST] = 2;
        } elseif ($certificateAuthority === false) {
            unset($opts[CURLOPT_CAINFO]);
            $opts[CURLOPT_SSL_VERIFYPEER] = false;
            $opts[CURLOPT_SSL_VERIFYHOST] = 0;
        } elseif ($verifyPeer !== true && $verifyPeer !== false && $verifyPeer !== 1 && $verifyPeer !== 0) {
            throw new InvalidArgumentException('verifyPeer must be 1, 0 or boolean');
        } elseif ($verifyHost !== 0 && $verifyHost !== 1 && $verifyHost !== 2) {
            throw new InvalidArgumentException('verifyHost must be 0, 1 or 2');
        } else {
            $opts[CURLOPT_SSL_VERIFYPEER] = $verifyPeer;
            $opts[CURLOPT_SSL_VERIFYHOST] = $verifyHost;
            if (is_file($certificateAuthority)) {
                unset($opts[CURLOPT_CAPATH]);
                $opts[CURLOPT_CAINFO] = $certificateAuthority;
            } elseif (is_dir($certificateAuthority)) {
                unset($opts[CURLOPT_CAINFO]);
                $opts[CURLOPT_CAPATH] = $certificateAuthority;
            } else {
                throw new RuntimeException(
                    'Invalid option passed to ' . self::SSL_CERT_AUTHORITY . ': ' . $certificateAuthority
                );
            }
        }

        $this->config->set(self::CURL_OPTIONS, $opts);

        return $this;
    }

しかし、まだ同じエラーがあります。php.ini ファイルにもこれがあります

; enable function that are disabled by default in the App Engine PHP runtime
google_app_engine.enable_functions = "php_sapi_name, php_uname, getmypid"
google_app_engine.allow_include_gs_buckets = "my-bucket-name"
allow_url_include = 1
extension = "curl.so"
google_app_engine.enable_curl_lite = “1”

おそらくSocialiteなしでログインをやり直し、Guzzleを使用するだけで、まだエラーが発生するかどうかを確認する以外に、オプションが不足しています。

更新ドキュメントでは、curl lite と full curl を同時にアクティブにすることはできないと記載されています。これは変更されたためextension = "curl.so"、php.ini ファイルにのみ含まれています。問題は解決しませんが、変更する必要があります

4

1 に答える 1

2

多くのグーグルと調査の後、私はこの問題を解決することができました。また、この質問のユーザー オメガのおかげですhttps://stackoverflow.com/questions/31631596/curl-error-7-during-guzzle-request-on-google -app-engine?noredirect=1#comment51981622_31631596

Laravel Socialite では Guzzle パッケージを使用していますが、このパッケージを Google App Engine にインストールすると、証明書ファイルを見つけることができません。最近のコミットは行を追加しました

// Google app engine
+        '/etc/ca-certificates.crt',

の中に

default_ca_bundle 関数

最新の Guzzle にアップデートしていない場合は、この行を追加してください。ディレクトリは

ベンダー/guzzlehttp/guzzle/src/functions.php

php.ini ファイルで拡張子 curl.so が有効になっていないことを確認してください。

于 2015-08-17T09:10:51.323 に答える