Сессия проверки PHP SSO

В настоящее время я пытаюсь создать страницу единого входа, на которой после входа пользователя с помощью Facebook или Google+ пользователь будет перенаправлен на страницу провайдера, а затем после успешного входа он будет перенаправлен обратно на сайт index.php. Теперь проблема в том, что я хочу знать, есть ли способы проверить, есть ли у пользователя логин. Например, когда пользователь входит в систему, кнопка входа должна измениться на «Выйти». Могу ли я знать, как это сделать. Заранее спасибо.

<nav id="menu"> <!-- Navigation -->
    <ul id="tabs"> <!-- unordered list -->
        <li><a href="index.html">Home</a></li>
        <li><a href="about.html">About</a></li>
        <li><a href="contact.html">Contact Us</a></li>
        <li><a href="login.php">Login</a></li>
        <ul class="nav navbar-nav navbar-right" >
            <li style="float:right;list-style-type:none;">
                <a class="janrainEngage" href="#">
                    <img src="<?php echo $_GET['photo']; ?> " height="30" width="30"/>
                    <?php echo $_GET['name'];?>
                </a>
            </li>
        </ul>
    </ul>
</nav>

Это мой код login.php:

<?php
// Below is a very simple and verbose PHP script that implements the Engage
// token URL processing and some popular Pro/Enterprise examples. The code below
// assumes you have the CURL HTTP fetching library with SSL.
require('helpers.php');

ob_start();

// PATH_TO_API_KEY_FILE should contain a path to a plain text file containing
// only your API key. This file should exist in a path that can be read by your
// web server, but not publicly accessible to the Internet.
$janrain_api_key = trim(file_get_contents('apiKey.txt'));

// Set this to true if your application is Pro or Enterprise.
$social_login_pro = false;

// Step 1: Extract token POST parameter
$token = $_POST['token'];

if ($token) {
    // Step 2: Use the token to make the auth_info API call.
    $post_data = array(
        'token' => $token,
        'apiKey' => $janrain_api_key,
        'format' => 'json'
    );

    if ($social_login_pro) {
        $post_data['extended'] = 'true';
    }

    $curl = curl_init();
    $url = 'https://rpxnow.com/api/v2/auth_info';
    $result = curl_helper_post($curl, $url, $post_data);
    if ($result == false) {
        curl_helper_error($curl, $url, $post_data);
        die();
    }
    curl_close($curl);

    // Step 3: Parse the JSON auth_info response
    $auth_info = json_decode($result, true);

    if ($auth_info['stat'] == 'ok') {
        echo "\n auth_info:";
        echo "\n"; var_dump($auth_info);

        // Pro and Enterprise API examples
        if ($social_login_pro) {
            include('social_login_pro_examples.php');
        }

        // Step 4: Your code goes here! Use the identifier in
        // $auth_info['profile']['identifier'] as the unique key to sign the
        // user into your system.
        //echo '<pre>'.print_r($auth_info).'</pre>';
        $name = $auth_info['profile']['displayName'];
        $address = $auth_info['profile']['address']['formatted'];
        $photo = $auth_info['profile']['photo'];
        $redirect = "http://localhost:8012/cm0655-assignment/index.php?photo=".$photo;
        header('Location: '.$redirect);
    } else {
        // Handle the auth_info error.
        output('An error occurred', $auth_info);
        output('result', $result);
    }
} else {
    echo 'No authentication token.';
}
$debug_out = ob_get_contents();
ob_end_clean();
?>
<html>
    <head>
        <title>Janrain Token URL Example</title>
    </head>
    <body>
        <pre><?php echo $debug_out; ?></pre>
    </body>
</html>

person anonymous5671    schedule 20.03.2016    source источник


Ответы (1)


В приведенном выше примере видно, что виджет Janrain Social Login (Engage) на стороне клиента отправляет токен аутентификации на ваш сервер, на котором запущена страница PHP. В этом сценарии токен, полученный виджетом на стороне клиента, отправляется на вашу страницу PHP, где страница PHP выполняет вызов curl на стороне сервера для конечной точки API Janrain Social Login «auth_info». Этот вызов подтверждает, что токен действителен, и возвращает нормализованные данные социального профиля пользователя на страницу вашего сервера.

В этом сценарии ваша серверная страница будет анализировать результат, и, если он действителен, серверная страница установит «флаг», чтобы указать, что пользователь успешно вошел в систему. Существует множество способов сохранить состояние аутентификации:

  • Наиболее безопасным является некоторая форма переменной сеанса на стороне сервера, по которой всегда проверяется ваш код на стороне сервера.
  • Напишите некоторый код обратно как часть результата, который устанавливает значение cookie или localStorage, чтобы указать, что пользователь прошел аутентификацию.

В конечном счете, то, как вы управляете аутентифицированным состоянием, зависит от деталей реализации, которые зависят от вас. Виджет Janrain Social Login (Engage) просто облегчает и нормализует процесс входа в социальные сети и позволяет вам, как разработчику, не реализовывать все различные API для нескольких поставщиков социальных сетей. Виджет Janrain Social Login не поддерживает состояние аутентификации.

В частности, ответьте на ваш вопрос о кнопке входа/выхода из системы - у вас будет клиентский Javascript, который обнаружит настройку файла cookie и переключит текст/css на кнопку, или вы можете сделать так, чтобы ваша серверная страница вводила необходимый клиент код Javascript на странице. Более надежный вариант, вероятно, будет использовать вызовы типа AJAX для отправки токена и получения результата, а затем обновления состояния кнопки.

person PBICS    schedule 21.03.2016