您好
几个小时前我已经下载了LightOpenID(http://gitorious.org/lightopenid),但仍然无法弄清楚如何使其工作。
我将这个google示例保存在 test.php 文件
<?php
require '../lib/init.php';
require '../lib/openID/openid.php';
try {
if(!isset($_GET['openid_mode'])) {
if(isset($_GET['login'])) {
$openid = new LightOpenID;
$openid->identity = 'https://www.google.com/accounts/o8/id';
header('Location: ' . $openid->authUrl());
}
?>
<form action="?login" method="post">
<button>Login with Google</button>
</form>
<?php
} elseif($_GET['openid_mode'] == 'cancel') {
echo 'User has canceled authentication!';
} else {
$openid = new LightOpenID;
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
}
} catch(ErrorException $e) {
echo $e->getMessage();
}
echo '<pre>'.print_r($openid,true).'</pre>';
?>
其中init.php是我的页面的init文件(常量,类,函数,数据库连接等) 运行此代码后,我收到标签为“Login with Google”的按钮,然后按下
echo '<pre>'.print_r($openid,true).'</pre>';
提供有关$ openid对象的一些信息
LightOpenID对象( [returnUrl] =&gt; http://kur.com/openid.php [required] =&gt;排列 ( )
[optional] => Array ( ) [identity:LightOpenID:private] => https://www.google.com/accounts/o8/id [claimed_id:LightOpenID:private] => https://www.google.com/accounts/o8/id [server:protected] => https://www.google.com/accounts/o8/ud [version:protected] => 2 [trustRoot:protected] => http://kur.com [aliases:protected] => [identifier_select:protected] => 1 [ax:protected] => 1 [sreg:protected] => [data:protected] => Array ( [login] => )
)
......没什么特别......那就是......
我花了很多时间在谷歌搜索教程,但连一个都找不到。你能帮帮我吗?
如何登录用户?
从哪里我必须得到记录的用户信息(作为用户名,邮件)?
我从来没有使用过开放式ID而且我很困惑....
提前致谢
答案 0 :(得分:34)
在您的示例中,有一行显示如何完成身份验证:
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
如果$openid->validate()
返回true,则表示声称为$openid->identity
的用户已通过身份验证。
如果您将其与标准身份验证进行比较:
$openid->validate()
validate()
返回true,则用户通过身份验证(使用$openid->identity
),因此我们设置一个cookie来记住他(或者您想要成功登录的其他任何内容)。基本上,一旦你确认用户是他声称的那个用户(即他已经过身份验证),你就好像是正常的身份验证一样。
通常,您必须在某处存储身份以及会话ID。
用户名在$openid->identity
。但是,您可能希望使用昵称作为显示的名称。
但是,获取昵称和电子邮件地址需要进行其他配置。
基本上,在致电$openid->authUrl()
之前,您必须添加:
$openid->required = array('namePerson/friendly', 'contact/email');
该行会导致LightOpenID请求这些参数。您可以在axschema.org查看其他参数列表(OP可能支持,也可能不支持)。
然后,要在调用validate()
后获取这些值,请致电$openid->getAttributes()
。它将返回所有可用的参数,例如:
array(
[namePerson/friendly] => Mewp
[contact/email] => mewp@example.com
)
但请注意,此列表可以包含其他参数,但可能不包含您请求的参数。基本上,OP可以随意返回任何想要的内容,因此您需要为缺少某些值做好准备。
答案 1 :(得分:5)
当用户点击'example-google.php页面上的'使用Google登录'按钮时,您将被重定向到Google,如果用户接受请求,他将再次被重定向到您的网页,您只能获得Openid用户。
但是如果您想获得其他信息或更改OpenID,您可以通过以下方式进行操作:
<?php
require 'openid.php';
try {
$openid = new LightOpenID;
if(!$openid->mode) {
if(isset($_GET['oidType'])) {
$oidType = $_GET['oidType'];
$openid = new LightOpenID;
if ($oidType==1)
{
$openid->identity = 'https://www.google.com/accounts/o8/id';
}
else
{
$openid->identity = 'https://me.yahoo.com ';
}
$openid->required = array(
'namePerson',
'namePerson/first',
'namePerson/last',
'contact/email',
);
$openid->returnUrl = 'http://www.yourdomain.com/login.php';
header('Location: ' . $openid->authUrl());
}
?>
<a href="?oidType=1">Login with Google</a>
<a href="?oidType=2">Login with Yahoo</a>
<?php
} elseif($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
}
} elseif($openid->validate()) {
$openid_identity = $openid->identity;
$data = $openid->getAttributes();
$email = $data['contact/email'];
$namePerson = $data['namePerson'];
$first = $data['namePerson/first'];
$last = $data['namePerson/last'];
echo "Openid:$identitystr <br>";
echo "Email : $email <br>";
echo "namePerson : $namePerson <br>";
echo "first : $first <br>";
echo "last : $last <br>";
} else {
echo "The user has not logged in";
}
} catch(ErrorException $e) {
echo $e->getMessage();
}
答案 2 :(得分:2)
这个脚本现在正可以在我的笔记本电脑上运行apache的localhost工作正常,并且可以通过wifi连接到互联网。
我被告知你应该在创建它时将你的域传递给新的LightOpenId对象。
$iniConfig
是存储在文档根目录之外的parse_ini_file数组,我存储了所有重要的变量。
在这种情况下
[openid]
domain='mydomain.com'
因此,我创建了新对象并包含服务器所在的域:
$openid = new LightOpenID($iniConfig['openid']['domain']);
我是这样编写的,并没有检查它是否在没有域的情况下工作..
答案 3 :(得分:-2)
您需要在端口80打开到外部网络的服务器上运行它,如果您在127.0.0.1上运行它Google无法访问您并返回信息