在php中简单的openID

时间:2010-11-07 21:41:04

标签: php openid lightopenid

我正在使用LightOpenID,虽然它很轻,但它不是很容易理解,而且它没有wiki ...

他们给出的示例文件如下(对于细长的帖子感到抱歉),我不明白为什么它会实例化两次LightOpenID?

require 'openid.php';
try {

    if(!isset($_GET['openid_mode'])) {  // what is this about?

        if(isset($_POST['openid_identifier'])) {

            $openid = new LightOpenID;

            $openid->identity = $_POST['openid_identifier'];

            header('Location: ' . $openid->authUrl());
        }
?>
<form action="" method="post">
    OpenID: <input type="text" name="openid_identifier" /> <button>Submit</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();
}

我正在尝试将其添加到我现有的脚本here,如果有人真的感觉有帮助的话。 我怎样才能使$ openid-&gt; validate()返回true,我可以将$ sql_answer保存到数据库中?

2 个答案:

答案 0 :(得分:3)

在OpenID中,需要跨相关方执行多个请求才能完成登录过程;单一的互动是不够的。更具体地说:

  1. 浏览器要求登录页面,您发送表单(既未设置openid_identifier,也未设置openid_mode)。
  2. 用户填写openid,然后提交。您需要与提供程序启动事务,重定向用户(设置表单中的openid_identifier,但不设置openid_mode)
  3. 用户被重定向到提供商,登录,提供商重定向回您的页面。您需要验证返回的数据是否可信,然后使用标识符实际登录用户(例如,建立会话,更新UI等)(openid_mode将设置为“id_res”,“cancel”或“error” )。
  4. 因此,LightOpenID的两个实例实际上属于案例2和3的单独HTTP请求;在案例1中,您不需要LightOpenID对象,因为您正在显示静态表单。

答案 1 :(得分:2)

他们提供了一个维基:http://code.google.com/p/lightopenid/w/list

如何使用您的脚本创建两个OpenID对象是不可能的。如果你不喜欢你的脚本$openid = new LightOpenID;两次,那么只需在if(isset($_POST['openid_identifier'])) {上写一次