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

0

Решение

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

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

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]