【问题标题】:simple openID in phpphp中的简单openID
【发布时间】:2010-11-07 21:41:03
【问题描述】:

我使用的是 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->validate() 返回 true 时,我可以将 $sql_answer 保存到数据库中?

【问题讨论】:

标签: php openid lightopenid


【解决方案1】:

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

  1. 浏览器要求登录页面,您发送表单(openid_identifier 和 openid_mode 均未设置)。
  2. 用户填写openid,提交。您需要与提供者开始交易,重定向用户(设置了表单中的 openid_identifier,但未设置 openid_mode)
  3. 用户被重定向到供应商,登录,供应商重定向回您的页面。您需要验证返回的数据是否真实,然后使用标识符实际登录用户(例如建立会话、更新 UI 等)(openid_mode 将设置为“id_res”、“cancel”或“error” )。

所以 LightOpenID 的两个实例化实际上属于情况 2 和 3 的单独 HTTP 请求;在情况 1 中,您不需要 LightOpenID 对象,因为您正在显示静态表单。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      相关资源
      最近更新 更多