首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lightopenid保留登录信息/注销

使用lightopenid保留登录信息/注销
EN

Stack Overflow用户
提问于 2011-12-05 22:04:40
回答 1查看 1.3K关注 0票数 2

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

那么,当用户浏览我的站点时,如何重新验证此ID以使他们保持登录状态?我想让他们的名字显示在右上角/响应他们的注销。

创建一个新的lightopenid对象、设置标识和调用validate()都不起作用--我的lightopenid对象是一个没有多少内容的数组,而validate()返回false。

此外,我如何编写使用户能够注销的链接?

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

代码语言:javascript
复制
    $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'); 
            }
        }           
    }
EN

回答 1

Stack Overflow用户

发布于 2011-12-06 03:57:17

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

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

您不能将用户从openid注销。但是,您可以删除您的会话,这样您的服务器就不会再记住这个用户已经登录了(如果不使用openid,您也会执行同样的操作)。

此外,请阅读附加在openid.php顶部的文档

代码语言:javascript
复制
 * 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.

当然,除非您真正了解使用它的安全含义。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8386477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档