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

Php 我怎么知道用户真的使用OpenID登录,或者只是粘贴上一次登录的URL?,php,lightopenid,Php,Lightopenid,我有两个页面:login.php和return.php。两者都使用LightOpenID 页面login.php创建指向OpenID提供者的链接,并告诉提供者将结果返回到return.php <?php require_once 'openid.php'; $openid = new LightOpenID("mydomain.com"); $openid->identity = 'https://www.google.com/accounts/o8/id'; $openid-&g

我有两个页面:login.phpreturn.php。两者都使用LightOpenID

页面login.php创建指向OpenID提供者的链接,并告诉提供者将结果返回到return.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>
<?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';
}
?>
以下是使用这两个页面的正常流程

  • 转到login.php并单击链接
  • 使用谷歌帐户登录
  • 系统重定向到return.php,并显示用户。。。已登录
  • 但是,稍后,我可以通过粘贴带有查询字符串的return.phpURL(从第3步复制),使return.php说同样的话,即使我没有执行第2步

    我怎么知道用户真的使用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>
    
    <?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';
    }
    ?>
    
    
    
    return.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>
    
    <?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';
    }
    ?>
    

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

    $openid->validate()
    每次身份验证只返回一次
    true
    。如果用户尝试使用完全相同的url(即相同的nonce等)再次登录,
    $openid->validate()
    将返回false。如果提供者按照规范工作,至少是这样。如果它不按照规范工作,那么您几乎无能为力