我正在为dokuWiki设置SSO登录名。我的dokuWiki的oauth插件需要通过SciFi-MMO Eve Online(CCP)的ESI服务器进行身份验证。
当前状态是,我可以登录Eve身份验证网站,但是我的Wiki抛出 “ EVEOnline没有提供所需的用户信息。无法登录” 错误(在第二个代码块的底部找到)并停止登录过程。
我正在使用vServer,Ubuntu 16.04,dokuWiki(最新),oAuth插件(最新),NGINX Web服务器和PHP 7.3
在添加一些打印行和var_dump行时,我得到以下结果:
var_dump($result) = array(6) { ["CharacterID"]=> int(00000000) ["CharacterName"]=> string(4) "TEST" ["ExpiresOn"]=> string(19) "2019-04-04T21:10:46" ["TokenType"]=> string(9) "Character" ["CharacterOwnerHash"]=> string(28) "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" ["IntellectualProperty"]=> string(3) "EVE" }
var_dump($username); = string(4) "TEST"
print ($username); = TEST
var_dump($uinfo); = bool(false)
print ($uinfo); = Array
class EVEOnlineAdapter extends AbstractAdapter {
/**
* Retrieve the user's data
*
* The array needs to contain at least 'user', 'mail', 'name' and optional 'grps'
*
* @return array
*/
public function getUser() {
$JSON = new \JSON(JSON_LOOSE_TYPE);
$data = array();
$json = $this->oAuth->request('https://esi.evetech.net/verify/?datasource=tranquility');
$result = $JSON->decode($json);
$json2 = $this->oAuth->request('https://esi.evetech.net/dev/characters/'.$result['CharacterID'].'/');
$result2 = $JSON->decode($json2);
$username = str_replace(array("","'"),"_", $result['CharacterName']);
$data['user'] = $username;
$data['name'] = $result['CharacterName'];
$data['mail'] = $username."@eveonline.com";
if($result2['99008040'] !== '99008040') {
return false;
}
return $data;
}
protected function processLogin($sticky, $service, $servicename, $page, $params = array()) {
$uinfo = $service->getUser();
$ok = $this->processUser($uinfo, $servicename);
if(!$ok) {
return false;
}
$this->setUserSession($uinfo, $servicename);
$this->setUserCookie($uinfo['user'], $sticky, $servicename);
if(isset($page)) {
if(!empty($params['id'])) unset($params['id']);
send_redirect(wl($page, $params, false, '&'));
}
return true;
}
protected function processUser($uinfo, $servicename) {
$uinfo['user'] = $this->cleanUser((string) $uinfo['user']);
if(!$uinfo['name']) $uinfo['name'] = $uinfo['user'];
if(!$uinfo['user'] || !$uinfo['mail']) {
msg("$servicename did not provide the needed user info. Can't log you in", -1);
return false;
}
在通过Eve Online进行身份验证之后,我期望能够访问Wiki的正常登录流程。
在我看来,$ uinfo变量需要包含TEST作为正确的“用户”而不是“ Array”,但是我不知道为什么getUser()无法提供正确的数据。
有人可以帮助我解决这个问题吗?
预先感谢