Не удается выполнить аутентификацию через Google после обновления php с 7 до 7.2 - PullRequest
0 голосов
/ 27 сентября 2018

Сегодня я обновил свою версию php с php 7 до php 7.2.10.

У меня есть веб-сайт, написанный с использованием codeigniter, и в какой-то части этого приложения я использую Google_Service_Oauth2.

Сбой запроса на проверку подлинности через Google После обновления версии php с этим сообщением:

Страница не перенаправляет должным образом

Firefox обнаружил, чтосервер перенаправляет запрос на этот адрес способом, который никогда не будет завершен.

This problem can sometimes be caused by disabling or refusing to accept cookies.

Это моя функция:

function byGoogle()
{
    require_once ('global/google/libraries/Google/autoload.php');

    ########## Google Settings.Client ID, Client Secret from https://console.developers.google.com #############
    $client_id = 'my-client-id-part.apps.googleusercontent.com'; 
    $client_secret = '_My_secret-Qx01';
    $redirect_uri = 'http://codepen.ir/login/byGoogle';


    ########## MySql details  #############
    $db_username = "username"; //Database Username
    $db_password = "pass"; //Database Password
    $host_name = "localhost"; //Mysql Hostname
    $db_name = 'dbName'; //Database Name
    ###################################################################

    $client = new Google_Client();
    $client->setClientId($client_id);
    $client->setClientSecret($client_secret);
    $client->setRedirectUri($redirect_uri);
    $client->addScope("email");
    $client->addScope("profile");

    $service = new Google_Service_Oauth2($client);

    //If $_GET['code'] is empty, redirect user to google authentication page for code.
    //Code is required to aquire Access Token from google
    //Once we have access token, assign token to session variable
    //and we can redirect user back to page and login.
    if (isset($_GET['code'])) {
      $client->authenticate($_GET['code']);
      $_SESSION['access_token'] = $client->getAccessToken();
      header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
      exit;
    }

    //if we have access_token continue, or else get login URL for user
    if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
      $client->setAccessToken($_SESSION['access_token']);
    } else {
      $authUrl = $client->createAuthUrl();
    }

    //Display user info or display login url as per the info we have.
    //echo '<div style="margin:20px">';
    if (isset($authUrl)){ 

        redirect( $authUrl );
        exit();
    } else {

        $user = $service->userinfo->get(); //get user info 



        $user_info = $this->md_login->getUserByMail($user->email);

        if($user_info === FALSE)
        {
             //some DB stuff

            if( $register )
            {
                $_SESSION['email']  = $email;
                $_SESSION['login']  = TRUE;
                $_SESSION['access'] = $user_type;

                if( $this->session->has_userdata('referer'))
                {
                    redirect( $this->session->userdata('referer'));
                }//if referer
                else
                {
                    redirect( base_url() );
                }//no referer

            }


        }//new user
        else
        {
            $_SESSION['email']  = $user->email;
            $_SESSION['login']  = true;
            $_SESSION['access'] = $user_info['user_type'];

            if( $this->session->has_userdata('referer'))
            {
                redirect( $this->session->userdata('referer'));
            }//if referer
            else
            {
                redirect( base_url() );
            }//no referer
        }

    }

}//byGoogle

До этого код работал хорошоизменение версии php.

Кто-нибудь Почему это произошло?

Заранее спасибо

...