простой openID в php - PullRequest
       3

простой openID в php

2 голосов
/ 08 ноября 2010

Я использую LightOpenID, и хотя он очень легкий, его не очень легко понять, и у него нет вики ...

Файл примера, который они приводят ниже (извините за удлиненный пост), я не понимаю, почему он дважды создает экземпляр 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();
}

Я пытаюсь добавить его в свой существующий скрипт здесь , если кто-то действительно чувствует себя полезным. Как я могу сделать так, чтобы когда $ openid-> validate () возвращал true, я мог сохранить $ sql_answer в базе данных?

Ответы [ 2 ]

3 голосов
/ 08 ноября 2010

В OpenID необходимо выполнить несколько запросов между вовлеченными сторонами для завершения процедуры входа в систему;одного взаимодействия было бы недостаточно.Более конкретно:

  1. Браузер запрашивает страницу входа, вы отправляете форму (ни openid_identifier, ни openid_mode не установлены).
  2. Пользователь заполняет openid и отправляет.Вам нужно начать транзакцию с провайдером, перенаправив пользователя (openid_identifier из формы установлен, но openid_mode нет)
  3. Пользователь перенаправлен к провайдеру, входит в систему, и провайдер перенаправляет обратно к вашемустр.Вам необходимо проверить, что возвращенные данные являются подлинными, а затем использовать идентификатор для фактического входа пользователя в систему (например, установить сеанс, обновить пользовательский интерфейс и т. Д.) (Для openid_mode будет установлено значение «id_res», «cancel» или «error»).).

Таким образом, два экземпляра LightOpenID фактически принадлежат отдельным HTTP-запросам для случаев 2 и 3;в случае 1 вам не нужен объект LightOpenID, поскольку вы отображаете статическую форму.

2 голосов
/ 17 января 2011

Они предоставляют вики: http://code.google.com/p/lightopenid/w/list

Невозможно создать два OpenID-объекта с помощью вашего скрипта.Если вам не нравится, что $openid = new LightOpenID; дважды в вашем скрипте, просто напишите его один раз за if(isset($_POST['openid_identifier'])) {

...