Разделы

Как запаролить страницу

Есть задача сделать доступ к каталогу запароленным. Т е человек нажимает на ссылку Каталог и на этой странице выходит форма «введите пароль для доступа к каталогу». Без всяких логинов и прочего, просто введите пароль и все тут.

Я сдела это с помощью Weblogin, просто в чанке поле «логин» сделал скрытым, создал в админке пользователя. Все вроде бы отлично работает, есть одно «но» — каталог может смотреть по этому паролю только один человек, других не пускает если он залогинен.
Вопрос: как сделать чтобы смотреть каталог могли сколько угодно народу. Возможно ли сделать это сниппетом Weblogin или нжно что-то другое?

Комментарии (16)

RSS свернуть / развернуть
0
Напиши свой сниппет. Проверяем $_REQUEST['secret_code']. Если есть — ставим куку или сессионную переменную. Если есть кука или сессионная переменная — показываем то что надо, если нет — то не показываем.
avatar

EvgeniyKuklin

  • 6 июня 2011, 12:43
0
к сожалению не умею (((
avatar

inscriptible

  • 6 июня 2011, 12:45
0
Дык if-else и все дела. Открой какой-нить другой сниппет, посмотри как там сделано. Главное не бояться!!!
avatar

EvgeniyKuklin

  • 6 июня 2011, 13:00
+1
если это не каталог ядерных боеголовок, пример кода снипета, который ставишь на странице каталога. Проверить код негде, ну думаю что есть от чего оттолкнуться…
<?php
error_reporting(0);
if (empty($HTTP_COOKIE_VARS[$cookie_pass]) || $_POST['pass'] != "qwerty"){ 
$modx->getChunk('formPass');	
	die; 
} else{
$password = $_POST['pass'] ? stripslashes($_POST['pass']) : $HTTP_COOKIE_VARS[$cookie_pass];
setcookie('cookie_pass', $password, 600);
};

создаёшь чанг с именем formPass, код чанга
<form action="[[~[[*id]]]]" method="post" name="dostup">
<input name="pass" type="password" size="10" maxlength="10">
<input type="submit" value="Проверить"></form>
avatar

valikras

  • 6 июня 2011, 14:34
0
что то не работает ((( выводит полностью пустую белую страницу
avatar

inscriptible

  • 6 июня 2011, 15:24
0
кажется чанг не правильно я вызвал… сейчас…
avatar

valikras

  • 6 июня 2011, 15:34
0
буду очень признателен ))
avatar

inscriptible

  • 6 июня 2011, 15:43
0
попробуй так....
<?php
error_reporting(0);
if (empty($HTTP_COOKIE_VARS[$cookie_pass]) || $_POST['pass'] != "qwerty"){ 
  $chunk = $modx->getChunk('formPass');	
  if (!$chunk) return 'No line item chunk!';
echo $chunk;
  die; 
} else{
$password = $_POST['pass'] ? stripslashes($_POST['pass']) : $HTTP_COOKIE_VARS[$cookie_pass];
setcookie('cookie_pass', $password, 600);
};
avatar

valikras

  • 6 июня 2011, 15:59
0
Плагин на «OnWebPageInit»


//<?php

$e = $modx->Event;

if ($e->name == 'OnWebPageInit') { 

$passwd = '123'; //смени пароль на свой
$loginPageId = 1; //id страницы с формой авторизации
$fldr = 2; //id папки, все документы в которой надо паролить

$thisId = $modx->documentIdentifier;
if ($thisId == $loginPageId) {
  //мы на странице авторизации 
  if (isset($_POST['strongPass']) && (trim($_POST['strongPass']) == $passwd)) {
    $setVar = md5($passwd);
    $_SESSION['strongPass'] = $setVar;
    $modx->sendRedirect($modx->makeUrl($fldr));//редирект на каталог
  } elseif (isset($_POST['strongPass']) && (trim($_POST['strongPass']) != $passwd)) {
    //пароль  введен неверно
    echo 'Неверный пароль!';
    return;
  } else {
    return;
  }
}

$parents = $modx->getParentIds($thisId);

if (!in_array($fldr,$parents) && $fldr != $thisId) {
  //мы не в том дереве, где нужен пароль
  return;
}

if (!isset($_SESSION['strongPass'])) {
  $modx->sendRedirect($modx->makeUrl($loginPageId)); //редирект на страницу с формой авторизации 
}

if($_SESSION['strongPass'] != md5($passwd))  {
  $modx->sendRedirect($modx->makeUrl($loginPageId)); //редирект на страницу с формой авторизации
}

return ;
}

//?>




Прописать id страницы авторизации, id каталога, пароль.

Отдельно создать страницу авторизации, поле с паролем назвать «strongPass».

avatar

alooze

  • 6 июня 2011, 19:29
0
а если нужно запаролить весь сайт, то что указать в строке
$fldr = 2; //id папки, все документы в которой надо паролить


и правильно ли я понимаю, что Ваш код, это и есть плагин OnWebPageInit? Т.е. нужно создать плагин и вставить в него код(с своими исправлениями), а как тогда вызвать на Главной странице этот плагин?
avatar

jeff-sett

  • 16 января 2012, 22:00
0
1) Плагин выполняется автоматом при наступлении определенного события. Т.е. вызываете его вы тем, что указываете, какое событие должен отслеживать плагин. В данном случае событие OnWebPageInit — начало создания веб-страницы. Каждый раз, когда парсер Modx начинает создавать новую страницу из всех шаблонов, чанков, сниппетов и пр., будет выполняться этот плагин.

2) В сущности, этот код и есть плагин, вы поняли правильно. Единственный момент — я его набросал «на коленке» полгода назад и не уверен, что тестировал. Сейчас по диагонали просмотрел — вроде бы все ОК должно быть.

3) Чтобы плагин выполнялся на главной странице — вы имеете в виду возможность запаролить весь сайт? Или форму ввода пароля разместить нужно на главной? Для настроек измените вот эти строки:


$passwd = '123'; //смени пароль на свой
$loginPageId = 1; //id страницы с формой авторизации
$fldr = 2; //id папки, все документы в которой надо паролить
avatar

alooze

  • 16 января 2012, 22:21
0
Я верно все понял:
1) Плагин я могу назвать как угодно, главное правильное событие выставить?
3) нужно запаролить весь сайт — заходишь на Главную — всплывает окно с вводом пароля, а весь контент не активный (накину на него слой черный, непрозрачный)
вот как-то так )
$fldr = 2; — в таком случае 0?
avatar

jeff-sett

  • 16 января 2012, 22:43
0
1) Да, название не имеет значения.

3) В этом случае можно вообще выбросить проверку на родительские документы. Вот эти строки:


$parents = $modx->getParentIds($thisId);

if (!in_array($fldr,$parents) && $fldr != $thisId) {
  //мы не в том дереве, где нужен пароль
  return;
}


не нужны, их нужно убрать.
avatar

alooze

  • 16 января 2012, 22:51
0
1) Создал новый плагин и назвал его Password и выставил событие «OnWebPageInit». Код плагина:

<?php
$e = $modx->Event;
if ($e->name == 'OnWebPageInit') { 
$passwd = '123'; //смени пароль на свой
$loginPageId = 9; //id страницы с формой авторизации
$fldr = 0; //id папки, все документы в которой надо паролить

$thisId = $modx->documentIdentifier;
if ($thisId == $loginPageId) {
  //мы на странице авторизации 
  if (isset($_POST['strongPass']) && (trim($_POST['strongPass']) == $passwd)) {
    $setVar = md5($passwd);
    $_SESSION['strongPass'] = $setVar;
    $modx->sendRedirect($modx->makeUrl($fldr));//редирект на каталог
  } elseif (isset($_POST['strongPass']) && (trim($_POST['strongPass']) != $passwd)) {
    //пароль  введен неверно
    echo 'Неверный пароль!';
    return;
  } else {
    return;
  }
}


if (!isset($_SESSION['strongPass'])) {
  $modx->sendRedirect($modx->makeUrl($loginPageId)); //редирект на страницу с формой авторизации 
}

if($_SESSION['strongPass'] != md5($passwd))  {
  $modx->sendRedirect($modx->makeUrl($loginPageId)); //редирект на страницу с формой авторизации
}

return ;
}
?>


2) Создал страницу с id=9 куда хочу поместить код авторизации… пока просто воткнул туда div со словом «Авторизация»

В итоге ни на одной странице не выводится этот Див :) что не так ?? Подскажите
avatar

jeff-sett

  • 29 января 2012, 18:49
0
Туплю… вопрос решил )))
avatar

jeff-sett

  • 29 января 2012, 18:51
0
Спасибо за оперативную помощь alooze, проблема решена! Кому то может еще пригодится это решение
avatar

inscriptible

  • 6 июня 2011, 19:49

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.