Как я могу узнать, что пользователь действительно вошел в систему, используя OpenID или просто вставив URL из предыдущего входа? - PullRequest
0 голосов
/ 22 марта 2012

У меня есть две страницы: login.php и return.php . Оба используют LightOpenID .

Страница login.php создает ссылку на провайдера OpenID и сообщает провайдеру вернуть результат в return.php

Ниже приведен обычный порядок использования этих двух страниц.

  1. Перейдите на login.php и нажмите на ссылку.
  2. Войдите, используя учетную запись Google.
  3. Система перенаправляет на return.php и показывает, что пользователь ... вошел в систему.

Однако позже я могу заставить return.php сказать то же самое, даже если я не сделаю Шаг 2, вставив URL-адрес return.php с его строкой запроса (копия с шага 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 ]

2 голосов
/ 23 марта 2012

$openid->validate() вернет true только один раз за аутентификацию. Если пользователь попытается снова войти в систему, используя тот же URL-адрес (то есть тот же одноразовый номер и т. Д.), $openid->validate() вернет false. По крайней мере, это тот случай, если провайдер работает в соответствии со спецификацией. Если этого не произойдет, вы почти ничего не сможете сделать.

0 голосов
/ 22 марта 2012

Документ LightOpenId не помогает.Но этот вопрос может помочь: ссылка

...