openid 与标头冲突

问题描述

我有一个主栏的程序,上面有很多按钮,可以打开各种程序来注册学生信息(结果、日程安排、图书馆书籍……)。 其中一个小节是“注册新学生”,它有一个按钮来“读取 eID”,我使用的是 openid。不幸的是,它给“标头”带来了问题:“无法修改标头信息 - 标头已由...发送” 我知道这是回声在主栏中显示按钮的问题。我已经用脚本替换了大多数标题,但这不适用于 openid。 我正在寻找替代品: header('Location: ' . $openid->authUrl());仍然打开网站以从 eID 读取信息。

include "lightopenid/openid.PHP";

$openid = new LightOpenID('www.something.be');

if (!$openid->mode) {
    $openid->identity = 'https://www.e-contract.be/eid-idp/endpoints/openid/ident';
    $openid->required = array('namePerson/first','namePerson/last','namePerson','person/gender','contact/postalCode/home','contact/postalAddress/home','contact/city/home','eid/nationality','eid/pob','birthDate','eid/card-number','eid/card-validity/begin','eid/card-validity/end','eid/photo');
    $openid->lang = 'nl';
    
    header('Location: ' . $openid->authUrl());

这个标题需要被替换,因为它在开始菜单中给出回显错误

在大多数情况下,我用这样的脚本替换了标题

echo("<script>location.href=$openid->authUrl();</script>");

但这对openid不起作用,它不启动连接,openid的属性保持为空。

我尝试使用

$openid->authUrl();

虽然调用了这个函数,但是也没有打开与网站的连接,所以openid的属性为空。

$returned_ob=$openid->getSregAttributes();
protected function getSregAttributes(){
        $attributes = array();
        $sreg_to_ax = array_flip(self::$ax_to_sreg);
        foreach (explode(',',$this->data['openid_signed']) as $key) {
            $keyMatch = 'sreg.';
            if (substr($key,strlen($keyMatch)) != $keyMatch) {
                continue;
            }
            $key = substr($key,strlen($keyMatch));
            if (!isset($sreg_to_ax[$key])) {
                # The field name isn't part of the SREG spec,so we ignore it.
                continue;
            }
            $attributes[$sreg_to_ax[$key]] = $this->data['openid_sreg_' . $key];
        }
        return $attributes;
    }

注意:未定义索引:openid_signed in...

returned_ob= 数组(0){ }

关于如何替换标头以启动连接并填写属性的任何想法?`

编辑:经过 looong 搜索后,我发现我可以用这个替换标题

$URL="http://yourwebsite.com/";
echo "<script type='text/javascript'>document.location.href='{$URL}';</script>";
echo '<Meta HTTP-EQUIV="refresh" content="0;URL=' . $URL . '">';

或者就我而言

echo "<script type='text/javascript'>location.href='{$openid->authUrl()}';</script>";
    echo '<Meta HTTP-EQUIV="refresh" content="0;URL=' . $openid->authUrl() . '">';

谢谢舒巴姆·库马尔。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)