我怎么知道用户真的使用OpenID登录或只是粘贴上一次登录的URL?

时间:2012-03-22 03:19:10

标签: php lightopenid

我有两页: login.php return.php 。两者都使用 LightOpenID

页面 login.php 会创建指向OpenID提供商的链接,并告知提供商将结果返回 return.php

以下是使用这两页的正常流程。

  1. 转到 login.php ,然后点击该链接。
  2. 使用Google帐户登录。
  3. 系统重定向到 return.php ,并显示用户...已登录。
  4. 然而,稍后,我可以使 return.php 说同样的事情,即使我不通过粘贴 return.php 的网址来执行第2步查询字符串(从步骤3复制)。

    我怎么知道用户真的使用OpenID登录,或者只是粘贴上一次登录的URL?

    以下是代码:

    的login.php

    <?php
    require_once 'openid.php';
    
    $openid = new LightOpenID("mydomain.com");
    $openid->identity = 'https://www.google.com/accounts/o8/id';
    $openid->returnUrl = 'http://mydomain.com/return.php'
    ?>
    
    <a href="<?= $openid->authUrl() ?>">Login</a>
    

    return.php

    <?php
    require_once 'openid.php';
    
    $openid = new LightOpenID("mydomain.com");
    if($openid->mode) {
      echo 'User ' . ($openid->validate() ? $openid->identity .  ' has ' : 'has not ') . 'logged in.';
    } elseif($openid->mode == 'cancel') {
      echo 'User has canceled authentication!';
    } else {
      echo 'Please go to login.php';
    }
    ?>
    

2 个答案:

答案 0 :(得分:2)

每次身份验证时,

$openid->validate()只会返回true次。如果用户尝试使用完全相同的URL(即同一个nonce等)再次登录,$openid->validate()将返回false。如果提供商按照规范工作,至少就是这种情况。如果没有,你几乎什么也做不了。

答案 1 :(得分:0)

LightOpenId的文档没有帮助。但这个问题可能有所帮助:link