Как переслать пользователя обратно в случае, если авторизация не пройдена - PullRequest
1 голос
/ 13 июня 2019

Мне нужно установить авторизацию на нескольких страницах и переслать пользователя обратно, если он не авторизован.На данный момент, это отображает страницу назначения с ошибкой.

Unauthorized
This server could not verify that you are authorized to access the 
document requested. Either you supplied the wrong credentials (e.g., 
bad password), or your browser doesn't understand how to supply the 
credentials required.

У меня 0 знаний по базовой аутентификации и apache conf.У меня есть Google глубоко и не нашел никакого решения, пожалуйста, совет.

Спасибо

SetEnvIf Request_URI ^/en auth=1

AuthName "Please login to access english part"
AuthType Basic
AuthUserFile "/path/to/my/.htpasswd"

# first, allow everybody
Order Allow,Deny
Satisfy any
Allow from all
Require valid-user
# then, deny only if required
Deny from env=auth

1 Ответ

0 голосов
/ 14 июня 2019

Это действительно ограничение базовой аутентификации HTTP.

Однако вы можете настроить ответ 401 (который, как я полагаю, вы видите, в отличие от 403), который сервер в противном случае отправил бы обратно.Однако вы можете напрямую перенаправить из пользовательского 401, что приведет к тому, что клиент получит ответ 3xx, а не 401, что не так информативно и запутанно для пользователей.Или вы представляете «дружеское» сообщение со ссылкой на то, откуда они пришли.

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

Например ... в верхней части вашего .htaccess файл, определите свой пользовательский документ об ошибке для ответа 401:

ErrorDocument 401 /errordocs/e401.php

В /errordocs/e401.php вам потребуется что-то вроде:

<?php
/**
 * 401 Unauthorized - Error Document
 */

// Get the HTTP Referer (if set at all)
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;

// Immediately redirect back to the referring page if known
// But the client then sees a 3xx response, without any error, which could be confusing for users
if (!empty($referer)) {
    header('Location: '.$referer,true,302);
    exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>401 Unauthorized</title>
</head>
<body>
<h1>401 Unauthorized</h1>

<p>Sorry, you do not have permission to view that resource.</p>

<p>
<?php if (empty($referer)): ?>
    <a href="/">Go back to the home page</a>
<?php else: ?>
    <a href="<?=$referer?>">Go back to <?=$referer?></a>
<?php endif; ?>
</p>

</body>
</html>

Чтобы «автоматизировать» это, вывозможно, можно реализовать метаобновление (или JS «перенаправление») обратно на ссылающуюся страницу (если установлено) через столько секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...