/ / Использование IIS (с Windows авторизацией) + PHP на DLE
январь 19 2007

Использование IIS (с Windows авторизацией) + PHP на DLE

Предлагаю Вашему вниманию готовое решение объединения IIS (используется Windows авторизация) + PHP + домен + сайт DLE.

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

Как я предлагаю реализовать в данном случае работу данного сайта в "корпоративной среде"?
1. Мы используем обязательный искусственный автологон пользователя в сайт, дабы мы могли иметь полный контроль над посетителем-пользователем.
2. Мы запрещаем пользователю менять свое имя, адрес, ... - поля в профиле, предварительно изменив в templates файл userinfo.tpl.

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. в engine/data/config.php в самом конце перед

?>

добавить

// Используется IIS & Windows Authorization
$iis_wa = true;
// Имя домена Windows + 1 или 2 слеша в зависимости от версии PHP - смотреть в phpinfo() в поле $_SERVER["AUTH_USER"]
$my_domen = "GROUP\\";


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2. в engine/modules/sitelogin.php перед

$_POST['login_name'] = mysql_escape_string($_POST['login_name']);

добавить

if($iis_wa) $_POST['login_name'] = str_replace($my_domen, "", $_SERVER["AUTH_USER"]);
else

3. в engine/modules/sitelogin.php перед

$member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='{$_POST['login_name']}' and password='".md5($_POST['login_password'])."'");

добавить

if($iis_wa) $member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='{$_POST['login_name']}'");
else

4. в engine/modules/sitelogin.php после

$is_logged = TRUE;
}

добавить

else {
$add_time = time()+($config['date_adjust']*60);
if($_SERVER['HTTP_X_FORWARDED_FOR']) $_IP = $db->safesql($_SERVER['HTTP_X_FORWARDED_FOR']); else $_IP = $db->safesql($_SERVER['REMOTE_ADDR']);

// Сюда пишем все запросы к сторонним базам данных для сбора информации о пользователе, главное чтобы прав хватило (запрос пойдет от имени пользователя).

$db->query("INSERT INTO " . PREFIX . "_users (name, password, email, reg_date, lastdate, user_group, logged_ip) VALUES ('$_POST['login_name']', '', '$_POST['login_name']@$my_domen', '$add_time', '$add_time', '".$config['reg_group']."', '".$_IP."')"); }

5. в engine/modules/sitelogin.php перед

if (isset($_POST['login']) AND !$is_logged) {

добавить

if($iis_wa) $_POST['login'] = "submit";

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

6. в admin.php перед

$username = $_POST['username'];
$cmd5_password = md5($_POST['password']);

добавить

if($iis_wa) $username = str_replace($my_domen, "", $_SERVER["AUTH_USER"]);
else

7. в admin.php заменить

if(check_login($username, $cmd5_password))

на

if(check_login($username, $cmd5_password, $iis_wa))

8. в admin.php перед

if($_REQUEST['action'] == 'dologin') {

добавить

if($iis_wa) $_REQUEST['action'] = 'dologin';

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

9. в engine/inc/functions.inc.php заменить

function check_login($username, $md5_password){
global $member_db, $db, $user_group, $lang, $domain;

if ($username == "" OR $md5_password == "") return false;

на

function check_login($username, $md5_password, $iis_wa){
global $member_db, $db, $user_group, $lang, $domain;

if ((!$iis_wa) AND ($username == "" OR $md5_password == "")) return false;

10. в engine/inc/functions.inc.php перед

$db->query("SELECT * FROM " . PREFIX . "_users where name='$username' and password='$md5_password' and banned != 'yes'");

добавить

if($iis_wa) $db->query("SELECT * FROM " . PREFIX . "_users where name='$username' and banned != 'yes'");
else


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Теперь все готово и если мы в engine/data/config.php закомментируем

$iis_wa = true;

или поставим false, то будет работать прежняя схема авторизации.

Вопросы? :fellow:

Комментарии

AllThat

AllThat

19 января 2007 19:19 Клиенты
0
а посмотреть гденить мона? а то слегка непонятно wassat
opaliha

opaliha

19 января 2007 20:38 Клиенты
0
Цитата: mc -aiZer-
Где можно подробно прочитать, что это вообще такое?)

Только в моих ответах видимо, а что непонятно то?

Цитата: AllThat
а то слегка непонятно

Допустим есть у Вас компьютер с Windows NT операционной системой, Вы заходите в Панель управления -> Установка и удаление программ -> Установка компонентов Windows -> ставите галочку Internet Information Services (IIS) -> Далее.
Если утрировано, то Вы установите на компьютер сервер аналогичный Apache тока от Microsoft. Подключайте к нему PHP, пара настроек и можете работать.

Зачем же использовать IIS, когда есть apache - спросите Вы?

Затем, что он от Microsoft, можно сказать IIS интегрирован в Windows, а конкретно - позволяет работать с Windows-авторизацией. Выполнили Вы вход на компьютер под учетной записью Smith, зашли на сайт, работающий под IIS, а Вас сразу узнали и сказали: Привет, Smith!
Это не результат работы cookies, не опознавание Вас по ip-адресу и что-то подобное, не нужно вводить ник и пароль, это просто Windows-авторизация recourse

Это используется в организациях.
xsmart

xsmart

19 января 2007 21:48 Посетители
0
Прикольно..
Спасибо что расказал..
Очень интерестно..
AllThat

AllThat

20 января 2007 02:22 Клиенты
0
отлично)) попробую на досуге wink
AtlAlex

AtlAlex

21 января 2007 15:43 Клиенты
0
Да, почему-бы не встоить поддержку Win+IIS в DLE ?
Vufer

Vufer

21 января 2007 17:29 Посетители
0
При входе дает вот такую ошибку.

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\www\network\engine\module
s\sitelogin.php on line 101
opaliha

opaliha

22 января 2007 10:27 Клиенты
0
Цитата: Vufer
engine\module
s\sitelogin.php on line 101

А что там в этой строке написано? По аналогии вот здесь еще можно добавить:

в engine/modules/sitelogin.php перед

$member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='".$db->safesql($_SESSION['dle_name'])."' and password='".md5($_SESSION['dle_password'])."'");

добавить

if($iis_wa) $member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='".$db->safesql($_SESSION['dle_name'])."'");
else


в engine/modules/sitelogin.php перед

$member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='".$db->safesql($_COOKIE["dle_name"])."' and password='".md5($_COOKIE["dle_password"])."'");

добавить

if($iis_wa) $member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='".$db->safesql($_COOKIE["dle_name"])."'");
else


Прошу прощения за неточность, рабочий станции под рукой не было где бы проверить, поэтому ошибся в 5 пункте:

надо было вместо

if (isset($_POST['login']) AND !$is_logged) {

написать

if (isset($_POST['login']) AND $_POST['login'] == "submit")
{


текст перекиньте на нужное место

if($iis_wa) $_POST['login'] = "submit";
valuex.ru

valuex.ru

26 января 2007 11:16 Посетители
0
круто smile
arclite

arclite

6 февраля 2007 01:43 Посетители
0
При установке DLE 5.1 выдает следующую ошибку:
Error: BLOB/TEXT column 'keywords' can't have a default value in file C:\inetpub\dle\install.php on line 770

Пожалуйста, подскажите, в чем проблема и как ее устранить ?
palachmb

palachmb

19 февраля 2007 10:15 Посетители
0
блин, та же ерунда :((
T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
opaliha

opaliha

23 февраля 2007 08:08 Клиенты
0
А причем тут install.php ? Моя модификация предназначена для уже установленного сайта, конечно все я предусмотреть не мог (честно говоря мне это не нужно было - предусматривать процесс установки с windows авторизацией, установится можно и по-старому, а потом уже переделать сайт).

На самом деле здесь абсолютно ничего сложного нет. Объясню принцип в двух словах.

Все выборки авторизации натипа
select * from dle_users where username = ... и password = ...
должны быть заменены на
select * from dle_users where username = LOGIN
где LOGIN = DOMEN\LOGIN от IIS

Понимаете? Обман невозможен потому что имя доменное и поставляется сиситемой авторизации, а пароль уже не нужен совсем.

Все. Ищите все места где подобные запросы (можете по слову password искать) и меняете принцип.

Да кстати, так как раньше пользователь должен был нажать Вход, а теперь ему этого делать не нужно, поулчается нужно принудительно в скрипте проделать $_POST['login'] = "submit";
Borisov

Borisov

13 апреля 2007 17:08 Клиенты
0
а возможно чтобы была и та и та авторизация?
opaliha

opaliha

6 мая 2007 06:24 Клиенты
0
Цитата: Borisov
а возможно чтобы была и та и та авторизация?

Тогда нужно проверку такую вот сделать:

Если LOGIN содержит в себе "DOMEN\\" тогда просто проверка наличия имени в базе, иначе проверка наличия имени и пароля в базе dle_users.


Ничего сложного.
Mr 13

Mr 13

22 мая 2007 23:20 Посетители
0
smile
golum

golum

5 июня 2007 14:11 Посетители
0
bully

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Календарь
«    Декабрь 2017    »
ПнВтСрЧтПтСбВс
 123
45678910
11121314151617
18192021222324
25262728293031
Опрос на сайте
Совершаете ли вы покупки в интернет?

Популярные новости
Архив новостей
Ноябрь 2017 (3)
Сентябрь 2017 (2)
Август 2017 (5)
Июль 2017 (1)
Июнь 2017 (1)
Апрель 2017 (3)