Сохранение информации для входа в систему с использованием lightopenid / выход из системы - PullRequest
2 голосов
/ 05 декабря 2011

Используя предоставленный пример кода, я позволил войти в свое приложение, используя мою учетную запись Google через lightopenid. Я сохранил идентификационные данные в файле cookie, чтобы мой логин сохранялся в течение сеанса.

Как мне затем подтвердить этот идентификатор, чтобы он оставался в системе, когда пользователь переходит на мой сайт? Я хочу, чтобы их имя отображалось в верхнем правом углу, и отвечаю на их выход из системы.

Создание нового объекта lightopenid, установка идентификатора и вызов validate () не работает - мой объект lightopenid - это массив, в котором не так много, и validate () возвращает false.

В дополнение к этому, как бы я закодировал ссылку, позволяющую пользователю выйти из системы?

Код для входа в систему (который работает, чтобы пользователь вошел на мой сайт):

    $openID = new LightOpenID($_SERVER['HTTP_HOST']);
    $openID -> required = array(
        'namePerson',
        'namePerson/first',
        'namePerson/last',
        'contact/email'
    );

    if (!$openID -> mode) {
        // TRYING TO LOG IN
        $openID -> identity = 'https://www.google.com/accounts/o8/id';
        redirect($openID -> authUrl());
    } else {            
        $page_data = array(
            "page_title"     => "Login",
            "additional_css" => array(),
            "additional_js"  => array()
        );

        if ($openID -> mode == "cancel") {
            $login_error = array(
                "login_error" => "Google authentication cancelled"
            );

            $this -> load -> view('global/header',$page_data);  
            $this -> load -> view('login/form',$login_error);
            $this -> load -> view('global/footer'); 
        } else {
            if ($openID -> validate()) {
                $openID_identity = $openID -> identity;
                $openID_data     = $openID -> getAttributes();
                $first_name      = $openID_data["namePerson/first"];
                $last_name       = $openID_data["namePerson/last"];
                $email           = $openID_data["contact/email"];

                $login = array(
                    "first_name" => $first_name,
                    "last_name"  => $last_name
                );

                // SESSION COOKIE
                $this -> session -> set_userdata(array(
                    "user_id"    => 0,
                    "identity"   => $openID_identity,
                    "first_name" => $first_name,
                    "last_name"  => $last_name,
                    "email"      => $email
                ));

                redirect("/login/welcome");
            } else {
                $login_error = array(
                    "login_error" => "Google authentication failed"
                );

                $this -> load -> view('global/header',$page_data);  
                $this -> load -> view('login/form',$login_error);
                $this -> load -> view('global/footer'); 
            }
        }           
    }

1 Ответ

3 голосов
/ 05 декабря 2011

Вы должны использовать механизм сессий (например, сессии php).Таким образом, вам не нужно снова проверять личность.

Как правило, для повторной проверки идентификатора вам придется повторить весь процесс аутентификации, что не очень хорошая идея.

Вы не можете выйти из системы из openid.Однако вы можете удалить сеанс, чтобы ваш сервер не запомнил, что этот пользователь уже вошел в систему (это то же самое, что вы сделали бы, если бы не использовали openid).

Также, пожалуйста, прочитайтедокументация, прикрепленная вверху openid.php:

 * Change the 'my-host.example.org' to your domain name. Do NOT use $_SERVER['HTTP_HOST']
 * for that, unless you know what you are doing.

Разумеется, если вы действительно не понимаете последствия использования ее для безопасности.

...