【问题标题】:Authentication using Google_Oauth2Service API使用 Google_Oauth2Service API 进行身份验证
【发布时间】:2015-04-17 06:27:57
【问题描述】:

我有以下登录代码:

  • 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/config.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 身份验证。我将它传递给测试用户,然后我被重定向回我的 Web 应用程序:但令牌虽然最初已加载,但在应用程序完全加载时被丢弃,我无法登录。尝试再次登录只是重做谷歌身份验证而没有成功.

我做错了什么?

编辑:我让它工作了。上面的代码是正确的。架构更改后,我的一个字段出现错字。我将把问题留下细节,希望代码可以在某个地方对某人有所帮助。

【问题讨论】:

  • 您可能想要回答您自己的问题以将其标记为已回答,而不是在标题中写入 SOLVED。干杯'
  • 感谢您的提醒。我会尽快接受。

标签: php google-authentication


【解决方案1】:

正如我在编辑中所写,上面的代码实际上是正确的(尽管这里没有显示一些控制器登录 JS 代码)。问题是架构更改后的字段拼写错误。

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 2017-01-21
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    相关资源
    最近更新 更多