2014-09-01 1 views
1

Я начинаю с Codeigniter, и у меня есть вопрос. Как (если возможно) создать авторизацию api на других сайтах (без facebook, twitter и т. Д.).Как создать логин api на другие сайты в Codeigniter на разных сайтах ex. IP.Board/wordpress

У меня есть три сайта - система CI, IP.Board и WordPress, и моя цель - интегрировать все эти системы в один auth api.

Я слышал об Oauth и OpenId, но я не знаю, как это переносится на CI. Это сложно?

ответ

0

Здравствуйте Может быть можно

Я могу предложение, вы можете использовать временный магазин таблицы, таблицы вошли идентификатор пользователя и текущее время дата &, а также IP-адрес, и сохранить этот один в к совместному использованию файлов cookie через несколько доменов/отправить скрытый сохраненный идентификатор, чтобы ваш множественный site.based на ид и ф и время вы можете реализовать логику

примечание: выход из системы и тайм-аут сеанса раз вы можете удалить запись табличной формы

я написала небольшой пример плз проверить его один раз . это мое будет полезно вам

Сессия, скорее всего, не сработает. Я думал об использовании JSON, но мне не удалось выяснить, как сделать Javascript динамичным, поскольку я всегда предпочитаю использовать jQuery (если у вас есть идея, не стесняйтесь делиться ими). В конце концов, я решил использовать PHP вместе с MySQL и cURL.

Мы первые начнем с создания таблицы для обработки входа в сеанс:

CREATE TABLE IF NOT EXISTS `sso_login` (`user_id` int(11) NOT NULL) 

Цель таблицы для хранения зарегистрированных пользователей и удалить то при выписке.

Далее это PHP скрипт, который будет вставлять новый идентификатор пользователя при подписании в (название файла: register.php):

<?php 
/** 
* 
* @ 
*/ 

$userId = $_GET['id']; 

$sql = sprintf("INSERT INTO sso_login VALUES ('%s')", $userId); 

mysql_query($sql); 
?> 

Просто, не так ли? Все, что он делает, это вставить идентификатор пользователя в таблицу.

Далее это файл, который удалить идентификатор пользователя, когда пользователь подписывает вне (имя файла: drop.php):

<?php 
/** 
* 
* 
*/ 

$userId = $_GET['id']; 

$sql = sprintf("DELETE FROM sso_login WHERE user_id = '%s'", $userId); 

mysql_query($sql); 
?> 

I believe the script is pretty much self-explainatory. 

Next is the file which checks whether user is already logged in or vice versa (file name: check.php): 

<?php 
/** 
* 
* 
*/ 

$userId = $_GET['userId']; 

$sql = sprintf("SELECT COUNT(*) FROM sso_login WHERE user_id = '%s'", $userId); 

$query = mysql_query($sql); 

if (mysql_result($query, 0, 0) > 0) 
{ 
echo 'User '.$userId.' has logged in'; 
} 

else 
{ 
echo 'User '.$userId.' is not logged in.'; 
} 
?> 

Этот скрипт будет проверять, имеется ли в таблице идентификатор пользователя передается или не. Если это не означает, что пользователь не вошёл в систему.

Эти три скрипта будут храниться на сервере другой стороны. Далее следуют сценарии, которые будут храниться на сервере BC, где выполняется процесс входа и выхода. Все эти процессы используют cURL.

первых, это скрипт, который будет обновлять другой сайт, когда пользователь вошел в систему (имя файла: login.php):

<

?php 
/** 
* 
* 
*/ 

if($_POST) 
{ 
$username = $_POST['username']; 
$password = $_POST['password']; 

if (($username == "bcoffee") && ($password == "demo")) 
{ 
$userId = 10; 
$target_site = sprintf("http://the-other-site.com/register.php?id=%s", $userId); 
$timeout = 5; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $target_site); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
curl_exec($ch); 
curl_close($ch); 

header('location: index.php'); 
} 
} 
?> 

Вы могли бы заметить, что имя пользователя и пароль тверды закодировано, это предназначалось для целей POC, поэтому это не имеет значения. Вернемся к учебнику.

Как вы можете видеть, он достигнет register.php с идентификатором пользователя. Обратитесь к содержимому регистра.php, который затем вставляет идентификатор пользователя в таблицу. Таким образом, другой сервер будет знать, что пользователь уже вошел в

Далее это скрипт, который сообщит другой сервер, когда пользователь подписывает вне. (Имя файла: logout.php):

<?php 
/** 
* 
* 
*/ 

$userId = 10; 
$target_site = sprintf("http://the-other-site.com/drop.php?id=%s", $userId); 
$timeout = 5; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $target_site); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
curl_exec($ch); 
curl_close($ch); 

header('location: login.html'); 
?> 

Аналогично login.php, но на этот раз он удалит идентификатор пользователя, когда пользователь выйдет из системы. Следовательно, когда система проверяет (используя check.php) и обнаруживает, что идентификатор пользователя недоступен, он будет знать, что пользователь в настоящее время не зарегистрирован.