2015-04-17 53 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; 
    } 
    
  • 在我的谷歌/配置.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'; 
    } 
    

基本上,在我嘗試登錄我問谷歌認證。我將它傳遞給一個測試用戶,然後重定向回到我的Web應用程序:但是,儘管最初加載了令牌,但在應用程序完全加載並且我無法登錄時會丟棄該令牌。嘗試再次登錄僅僅是重做了Google身份驗證而沒有成功。

我在做什麼錯?

編輯:我得到它的工作。上面的代碼是正確的。在模式更改之後,我的某個字段出現了拼寫錯誤。我將留下問題的細節,希望代碼可以幫助別人。

+1

您可能想要自己的問題來標記爲答案,而不是寫入已解決的標題。乾杯' –

+0

感謝您的提醒。我會盡快接受它。 – user991710

回答

0

正如我在編輯中寫的,上面的代碼實際上是正確的(雖然有一些控制器登錄JS代碼沒有在這裏顯示)。模式更改後,問題是字段拼寫錯誤。