PHP文件中认证请求的解码未传递正确的值

时间:2019-04-04 20:59:48

标签: php authentication dokuwiki

我正在为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()无法提供正确的数据。

有人可以帮助我解决这个问题吗?

预先感谢

0 个答案:

没有答案