X

WordPress закрыть сайт паролем

Потребовалось мне закрыть сайт паролем, от посторонних глаз. Причем сохранив работоспособность всего остального: чтобы те кто пароль знают могли зайти на сайт и использовать его в обычном режиме.

Кроме того, этот способ не должен зависеть от самого WP.

Итак:

1. Открываем www/index.php

2. В самый верх, после

<?

добавляем это

        if (!isset($_COOKIE['auth_key']) OR !trim($_COOKIE['auth_key']))
        {
             if (isset($_POST['f_pass']) AND ($_POST['f_pass']=='тут-нужно-ввести-пароль'))
             {
                setcookie('auth_key', time(), time() + 60*60*24);
                Header('Location: http://www.site.com/');
             }
             die('<html><head><title>AUTH</title></head><body><h3>Auth required</h3><form action-xhr="#" method="post"><input type="password" name="f_pass" value="" /><input type="submit" value="Enter"></form></body></html>');
        }
        else
        {
             if (isset($_GET['bye']) AND ($_GET['bye']=='bye'))
             {
                setcookie('auth_key', NULL, -1);
                Header('Location: http://www.site.com/');
             }
        }

3. http://www.site.com, заменяем на адрес Вашего сайта, а тут-нужно-ввести-пароль на ваш пароль

4. Всё, можно проверять 🙂

5. Для выхода нужно перейти по такой ссылке: http://www.site.com/?bye=bye

p.s. НЕ ЗАБЫВАЙТЕ ДЕЛАТЬ БЭКАПЫ, перед тем как начнете вносить какие-либо правки!!!

p.s.1. isset, конечно лучше заменить на !empty, но мой парсер тэгов не любит !empty 🙂
p.s.2. Этот способ будет работать, не только с WordPress, а вообще с любым сайтом, где есть единая точка входа.

Категории: CMS PHP Wordpress
Тэги: password

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

  • Парсер будет выдавать ошибку на empty, если переменная не существует

    Можно сделать так:

    if ( (!isset($_COOKIE['auth_key']) && !empty($_COOKIE['auth_key'])) ) || !trim($_COOKIE['auth_key']))

    И в таком духе)

    • наверное стоит проверить, т.к. код написан более 5и лет назад, но именно isset и проверяет переменную на существование, поэтому !empty не имеет тут смысла

  • Добрый день! Не могли бы подсказать такой вариант: Чтоб доступ к блогу был только у авторизированных пользователей.Чтоб при заходе на сайт сразу была страница авторизации..Кто не авторизовался тот не может просматривать страницы...и дальше страницы авторизации никуда не мог уйти.

    • Привет!
      Я вижу несколько вариантов:
      1) Тот что описан в этой статье. При этом для того чтобы войти, всем нужно будет знать один и тот же пароль.
      2) Похожий на первый вариант, но закрыть сайт через htaccess, вот тут есть описание: htaccess: закрыть сайт паролем
      3) Использовать плагин вроде этого: WP-Members

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

  • Пару раз сработала и все теперь после ввода пароля страница AUTH просто обновляется!
    Подскажите в чем может быть дело?

    • Всего скорее следующее:

      • не правильно вводишь пароль: caps lock или раскладка
      • какие-то проблемы с куками - попробуй закрыть и переоткрыть броузер
      • какие-то проблемы с плагинами броузера - попробуй работает ли в другом броузере

      Проверь правильно ли доходит пароль, для этого на время теста измени код вот так:

      if (!isset($_COOKIE['auth_key']) OR !trim($_COOKIE['auth_key']))
      {
      echo 'COOKIE-NOT-FOUND
      '.PHP_EOL;
      if (isset($_POST['f_pass']) AND ($_POST['f_pass']=='тут-нужно-ввести-пароль'))
      {
      die ('CORRECT PASSWORD
      ').PHP_EOL;
      setcookie('auth_key', time(), time() + 60*60*24);
      Header('Location: http://www.site.com/');
      }
      else
      {
      die ('BAD PASSWORD :'.$_POST['f_pass'].'
      ').PHP_EOL;
      }
      die('<html><head><title>AUTH</title></head><body><h3>Auth required</h3><form action-xhr="#" method="post"><input type="password" name="f_pass" value="" /><input type="submit" value="Enter"></form></body></html>');
      }
      else
      {
      die('YOU-ARE-ALREADY-AUTHORIZED
      '.PHP_EOL);
      if (isset($_GET['bye']) AND ($_GET['bye']=='bye'))
      {
      setcookie('auth_key', NULL, -1);
      Header('Location: http://www.site.com/');
      }
      }