Реализация авторизации

azkaban

Постоялец
Регистрация
16 Мар 2015
Сообщения
144
Реакции
10
Здравствуйте, подскажите пожалуйста, как реализовать так, чтобы пользователь который не авторизовался на сайте не смог увидеть его содержимое, по примеру Для просмотра ссылки Войди или Зарегистрируйся.
И вот в чем еще проблема, нужно чтобы к странице index.php не прикасаться, чтобы она оставалась статичной и с нее не редиректило на авторизацию, а со всех остальных страниц, если человек не вошел в систему, сразу редиректило на авторизацию.
 
PHP:
if (!$IS_LOGIN) {
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: /login.php"); 
    exit(); 
}
 
Ищи на packagist готовые штуки по словам user, auth для php и смотри чтоб было побольше звёздочек (хоть какая-то гарантия качества)

В современных фреймворках делается добавлением нескольких строк в конфиг, пример для yii2:
PHP:
    'as access' => [
        'class' => 'yii\filters\AccessControl',
        'except' => ['site/login', 'site/error'],
        'rules' => [
            [
                'allow' => true,
                'roles' => ['@'],
            ],
        ],
    ],
и весь сайт закрыт для неавторизованных, с перебросом на форму логина, а после входа возвращает на запрошенную изначально страницу.
Но изучить фреймворк это дело долгое, так что пользуйтесь советом из первой строки в этом сообщении.
 
Ищи на packagist готовые штуки по словам user, auth для php и смотри чтоб было побольше звёздочек (хоть какая-то гарантия качества)

В современных фреймворках делается добавлением нескольких строк в конфиг, пример для yii2:
PHP:
    'as access' => [
        'class' => 'yii\filters\AccessControl',
        'except' => ['site/login', 'site/error'],
        'rules' => [
            [
                'allow' => true,
                'roles' => ['@'],
            ],
        ],
    ],
и весь сайт закрыт для неавторизованных, с перебросом на форму логина, а после входа возвращает на запрошенную изначально страницу.
Но изучить фреймворк это дело долгое, так что пользуйтесь советом из первой строки в этом сообщении.
Спасибо, это нужно на движок KVS реализовать.

PHP:
if (!$IS_LOGIN) {
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: /login.php");
    exit();
}
Это я так полагаю сам редирект?

Это я так полагаю сам редирект?
Понял, это HTTP авторизация
 
Последнее редактирование модератором:
Ищи на packagist готовые штуки по словам user, auth для php и смотри чтоб было побольше звёздочек (хоть какая-то гарантия качества)

В современных фреймворках делается добавлением нескольких строк в конфиг, пример для yii2:
PHP:
    'as access' => [
        'class' => 'yii\filters\AccessControl',
        'except' => ['site/login', 'site/error'],
        'rules' => [
            [
                'allow' => true,
                'roles' => ['@'],
            ],
        ],
    ],
и весь сайт закрыт для неавторизованных, с перебросом на форму логина, а после входа возвращает на запрошенную изначально страницу.
Но изучить фреймворк это дело долгое, так что пользуйтесь советом из первой строки в этом сообщении.
Стоит движок KVS, а там все не как у людей, уже просто с этой реализацией мозг вынес(
 
Создай файлик auth.php
Код:
<?
function sign($str) {
   $validate = $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'];
   $salt = 'Some veRy L000ng stR1nG';
   return md5($str.$salt.$validate);
}

$logged=0;

if ($_REQUEST[login] == 'admin'  && $_REQUEST[password] == 'admin') {
   // ставим куку
   setcookie('adm', 'admin|'.sign('admin'), 0, '/');         // lifetime=0
   $logged = 1;
} else if ($_COOKIE[adm]) {
   //  проверяем куку
   $arr = explode('|',$_COOKIE[adm]);
   if ($arr[0] == 'admin' && $arr[1] == sign($arr[0])) $logged = 1;
}

if (!$logged) {
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body><br><br><br><br>
<form method=post>
<table align=center>
<tr><td>Login:</td><td><input name=login></td></tr>
<tr><td>Password:</td><td><input name=password type=password></td></tr>
<tr><td>&nbsp; </td><td><input type=submit value=Login></td></tr>
</table>
</form>
</body>
<?
  die();
}

Замени там логин/пароль на свои.
И во все файлы, куда не должно пускать без авторизации, вставь в начало
Код:
  include  "/путь/к/auth.php";
 
Создай файлик auth.php
Код:
<?
function sign($str) {
   $validate = $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'];
   $salt = 'Some veRy L000ng stR1nG';
   return md5($str.$salt.$validate);
}

$logged=0;

if ($_REQUEST[login] == 'admin'  && $_REQUEST[password] == 'admin') {
   // ставим куку
   setcookie('adm', 'admin|'.sign('admin'), 0, '/');         // lifetime=0
   $logged = 1;
} else if ($_COOKIE[adm]) {
   //  проверяем куку
   $arr = explode('|',$_COOKIE[adm]);
   if ($arr[0] == 'admin' && $arr[1] == sign($arr[0])) $logged = 1;
}

if (!$logged) {
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body><br><br><br><br>
<form method=post>
<table align=center>
<tr><td>Login:</td><td><input name=login></td></tr>
<tr><td>Password:</td><td><input name=password type=password></td></tr>
<tr><td>&nbsp; </td><td><input type=submit value=Login></td></tr>
</table>
</form>
</body>
<?
  die();
}

Замени там логин/пароль на свои.
И во все файлы, куда не должно пускать без авторизации, вставь в начало
Код:
  include  "/путь/к/auth.php";

Спасибо за ответ, очень вам благодарен. Но попробовал реализовать ваш код на движке DLE и он не работает(
 
Спасибо за ответ, очень вам благодарен. Но попробовал реализовать ваш код на движке DLE и он не работает(
При использовании индексов, кавычек нет в примере

К тому же использование логина и пароля напутано. Код будет работать только если логин и пароль одинаковые
 
При использовании индексов, кавычек нет в примере

К тому же использование логина и пароля напутано. Код будет работать только если логин и пароль одинаковые
кавычки выставил, не работает.

Весь движок KVS сделан на Smatry
Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование модератором:
кавычки выставил, не работает.

Весь движок KVS сделан на Smatry
Для просмотра ссылки Войди или Зарегистрируйся
Только 1 пару логин/пароль надо? Или полноценную авторизацию? (Регистрация/Вход)

Если 1 пара (надо заинклудить на все страницы:(
PHP:
<?php

// Выставить свои логин / пароль. В кавычках! Кавычки не трогать!

$login = 'admin';
$password = 'AWd12w7d0&D)&@';

// Ниже не трогать!

$salt = 'AWd28d_SAJD_18w9dPJIUAWD)1789d';
$auth = false;
$message = '';
$form = <<<HTML
    <head>
        <meta charset="UTF-8">
        <title>Авторизация</title>
    </head>
    <body>
        <form action="" method="POST">
            {message}
            <center><b>Логин:</b></center>
            <center><input type="text" name="login" placeholder="Administrator" /></center>
            <center><b>Пароль:</b></center>
            <center><input type="password" name="passwd" placeholder="123456789" /></center>
        </form>
    </body>
HTML;

if($_SERVER['REQUEST_URI'] === '/') $auth = true;

if( isset($_POST['login'], $_POST['passwd']))
{
    if( $_POST['login'] === $login and $_POST['passwd'] === $password)
    {
        setcookie('admin', md5($salt.$login.$password), time()+1296000, '/', $_SERVER['HTTP_HOST'], false, true);
        $auth = true;
    }
    else
    {
        $message = '<center><b>Неверные логин или пароль</b></center>';
    }
}
elseif( isset($_COOKIE['admin']) and $_COOKIE['admin'] === md5($salt.$login.$password))
{
    $auth = true;
}

if( !$auth)
{
    die(str_replace('{message}', $message, $form));
}

Редиректы, много пользователей это уже долго
 
Назад
Сверху