Потребовалось мне закрыть сайт паролем, от посторонних глаз. Причем сохранив работоспособность всего остального: чтобы те кто пароль знают могли зайти на сайт и использовать его в обычном режиме.
Кроме того, этот способ не должен зависеть от самого 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, а вообще с любым сайтом, где есть единая точка входа.
Комментарии (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 просто обновляется!
Подскажите в чем может быть дело?
Всего скорее следующее:
Проверь правильно ли доходит пароль, для этого на время теста измени код вот так:
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/');
}
}