使用提供的示例代码,我可以通过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');
}
}
}发布于 2011-12-06 03:57:17
你应该使用会话机制(比如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.当然,除非您真正了解使用它的安全含义。
https://stackoverflow.com/questions/8386477
复制相似问题