2015-04-17 2 views
0

У меня есть следующий код входа:Аутентификация с помощью Google_Oauth2Service API

  • JS Вход контроллера:

    token = window.localStorage.getItem("token"); 
    Ext.php.Users.login(token, function(n) { 
    if (Ext.isString(n)) window.location = n; 
    else if (n != null) { 
        app.user = user; 
        r.add({ 
         id: 0, 
         email: t.email, 
         password: t.password, 
         roles: user.Roles, 
         defaultrole: user.DefaultRole 
        }); 
        e.loadMainView("userHome"); 
    } 
    }); 
    
  • функция PHP Логин:

    public function login($token) { 
        $client = new Google_Client(); 
        $oauth2 = new Google_Oauth2Service($client); 
    
        if (!empty($token)) { 
         $token = base64_decode($token); 
         $client->setAccessToken($token); 
    
         if (!$client->isAccessTokenExpired()) { 
          $user = $oauth2->userinfo->get(); 
    
          $email = filter_var($user['email'], FILTER_SANITIZE_EMAIL); 
    
          $u = $this->getByEmail($email); 
    
          if ($u != null) return $u; 
         } 
    
         $this->logout($token); 
        } 
    
        $authUrl = $client->createAuthUrl(); 
        return $authUrl; 
    } 
    
  • В моей Google/конфигурации .php файл:

    ... 
    'oauth2_redirect_uri' => getLoginCallBackUrl(), 
    ... 
    
  • Эта функция, в том же файле:

    function getLoginCallBackUrl() { 
        $pageURL = 'http'; 
        //if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} 
        $pageURL .= "://"; 
        if ($_SERVER["SERVER_PORT"] != "80") { 
         $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
        } else { 
         $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
        } 
    
        return substr($pageURL,0,strpos($pageURL,'/api/') + 5) .'login_callback.php'; 
    } 
    

В принципе, после того, как я пытаюсь войти в систему я попросил Google Authentication. Я передаю его тестовому пользователю, и я перенаправляюсь обратно к своему веб-приложению: но токен, хотя и первоначально загружен, отбрасывается при полной загрузке приложения, и я не могу войти в систему. Повторное повторное подключение просто отменяет проверку подлинности Google без успеха ,

Что я делаю неправильно?

EDIT: Я получил его на работу. Правильный код. После изменения схемы у меня была опечатка с одним из моих полей. Я оставлю вопрос с деталями в надежде, что код может кому-то помочь.

+1

Возможно, вы захотите ответить на свой вопрос, чтобы указать на него как на ответ, а не на запись разрешения в заголовок. Cheers ' –

+0

Спасибо за напоминание. Я приму это, как только смогу. – user991710

ответ

0

Как я уже писал в редакции, приведенный выше код действительно правильный (хотя здесь немного кода входа JS контроллера не показан). Проблема была опечаткой поля после смены схемы.

Смежные вопросы