使用 Google_Oauth2Service API 进行身份验证
Authentication using 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/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 应用程序:但是令牌虽然最初已加载,但在应用程序完全加载后被丢弃,我无法登录。尝试再次登录只会重做 google 认证失败。
我做错了什么?
编辑:我让它工作了。上面的代码是正确的。架构更改后,我的其中一个字段出现错字。我将把问题留在细节中,希望代码可以在某个地方对某人有所帮助。
正如我在编辑中所写,上面的代码实际上是正确的(尽管这里没有显示一些控制器登录 JS 代码)。问题是架构更改后的字段拼写错误。
我有以下登录码:
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 应用程序:但是令牌虽然最初已加载,但在应用程序完全加载后被丢弃,我无法登录。尝试再次登录只会重做 google 认证失败。
我做错了什么?
编辑:我让它工作了。上面的代码是正确的。架构更改后,我的其中一个字段出现错字。我将把问题留在细节中,希望代码可以在某个地方对某人有所帮助。
正如我在编辑中所写,上面的代码实际上是正确的(尽管这里没有显示一些控制器登录 JS 代码)。问题是架构更改后的字段拼写错误。