2016-03-20 3 views
0

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

<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> 

ответ

1

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^