我已经设法让登录按钮使用oAuth 2.0在本地主机上工作。我一直在寻找其他解决方案,比如试图编辑OAUTH2.php文件以包含hd参数。以下是它的外观:
public function createAuthUrl($scope) {
$params = array(
'response_type' => 'code',
'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
'client_id' => $this->client->getClassConfig($this, 'client_id'),
'scope' => $scope,
'access_type' => $this->client->getClassConfig($this, 'access_type'),
'approval_prompt=' . urlencode($this->approvalPrompt),
'hd=domain.com'
);
// Prefer prompt to approval prompt.
if ($this->client->getClassConfig($this, 'prompt')) {
$params = $this->maybeAddParam($params, 'prompt');
} else {
$params = $this->maybeAddParam($params, 'approval_prompt');
}
$params = $this->maybeAddParam($params, 'login_hint');
$params = $this->maybeAddParam($params, 'hd');
$params = $this->maybeAddParam($params, 'openid.realm');
$params = $this->maybeAddParam($params, 'include_granted_scopes');
// If the list of scopes contains plus.login, add request_visible_actions
// to auth URL.
$rva = $this->client->getClassConfig($this, 'request_visible_actions');
if (strpos($scope, 'plus.login') && strlen($rva) > 0) {
$params['request_visible_actions'] = $rva;
}
if (isset($this->state)) {
$params['state'] = $this->state;
}
return self::OAUTH2_AUTH_URL . "?" . http_build_query($params, '', '&');
}
正如你所看到的,我尝试在$params数组中添加hd参数,但它仍然允许我使用我的普通gmail帐户登录。我怎样才能做到这一点?
假设您的域是Google Apps域,您可以通过执行以下操作来限制允许的用户域。
1.将GAE应用程序推荐限制到特定域
开发者控制台-->应用程序引擎-->设置-->应用程序设置-->编辑-->在谷歌身份验证部分,选择"谷歌应用程序域",输入域名。
2.将GAE应用程序连接到您的谷歌应用程序域
在谷歌应用程序域的谷歌管理控制台上,将您的应用程序添加为新的谷歌应用程序引擎服务。
此外,谷歌似乎会直接向您的服务器提供ID令牌。但是,如果不是这样,请根据谷歌的OpenID Connect文档验证ID令牌,其中包括验证hd
声明是否正确。
希望这能有所帮助!