使用lightopenid / log out保留登录信息

时间:2011-12-05 14:04:40

标签: php codeigniter lightopenid

使用提供的示例代码,我可以通过lightopenid使用我的Google帐户登录我的应用。我已将身份存储在cookie中,以便我的登录可以在整个会话中持续存在。

如何在用户导航我的网站时重新验证此ID以保持登录状态?我想让他们的名字显示在右上角/回复他们退出。

创建一个新的lightopenid对象,设置标识并调用validate()不起作用 - 我的lightopenid对象是一个数量不多的数组,而validate()返回false。

除此之外,我如何编写一个链接,使用户能够注销?

登录代码(用于将用户输入到我的网站):

    $openID = new LightOpenID($_SERVER['HTTP_HOST']);
    $openID -> required = array(
        'namePerson',
        'namePerson/first',
        'namePerson/last',
        'contact/email'
    );

    if (!$openID -> mode) {
        // TRYING TO LOG IN
        $openID -> identity = 'https://www.google.com/accounts/o8/id';
        redirect($openID -> authUrl());
    } else {            
        $page_data = array(
            "page_title"     => "Login",
            "additional_css" => array(),
            "additional_js"  => array()
        );

        if ($openID -> mode == "cancel") {
            $login_error = array(
                "login_error" => "Google authentication cancelled"
            );

            $this -> load -> view('global/header',$page_data);  
            $this -> load -> view('login/form',$login_error);
            $this -> load -> view('global/footer'); 
        } else {
            if ($openID -> validate()) {
                $openID_identity = $openID -> identity;
                $openID_data     = $openID -> getAttributes();
                $first_name      = $openID_data["namePerson/first"];
                $last_name       = $openID_data["namePerson/last"];
                $email           = $openID_data["contact/email"];

                $login = array(
                    "first_name" => $first_name,
                    "last_name"  => $last_name
                );

                // SESSION COOKIE
                $this -> session -> set_userdata(array(
                    "user_id"    => 0,
                    "identity"   => $openID_identity,
                    "first_name" => $first_name,
                    "last_name"  => $last_name,
                    "email"      => $email
                ));

                redirect("/login/welcome");
            } else {
                $login_error = array(
                    "login_error" => "Google authentication failed"
                );

                $this -> load -> view('global/header',$page_data);  
                $this -> load -> view('login/form',$login_error);
                $this -> load -> view('global/footer'); 
            }
        }           
    }

1 个答案:

答案 0 :(得分:3)

您应该使用会话机制(如php会话)。这样,您就不必再次验证身份。

通常,为了再次验证标识符,您必须重复整个身份验证过程,这不是一个好主意。

您无法将用户从openid中注销。但是,您可以删除您的会话,以便您的服务器不再记住该用户已经登录(这与使用openid时完全相同)。

另外,请阅读openid.php顶部附带的文档:

 * Change the 'my-host.example.org' to your domain name. Do NOT use $_SERVER['HTTP_HOST']
 * for that, unless you know what you are doing.

当然,除非您真正理解使用它的安全隐患。

相关问题