sandersik
@sandersik
Занимаюсь программированием 2-3 года

Как сделать аутентификацию на php?

Как сделать сайт с аутентификацией на php?
Видел статью - https://blog.foolsoft.ru/php-sozdanie-formy-vxoda-... (не реклама)
Из нее код:
<?php
header('Content-type: text/html;charset=utf-8');
session_start();

define('SALT', 'As913yr-1u3 -ru1 mr=1r=1 m=0r813'); //рандомная строка

function getPassword($password)
{   //функция получения зашифрованного пароля
    return md5($password.SALT);
}

$users = array( //мы не используем БД, поэтому пользователей храним в массиве
    //пароль = getPassword('password1')
    'login1' => array('password' => '4b0e292e27ee63a490a5214e225999b0', 'name' => 'Имя пользователя'),
    //пароль = getPassword('password2')
    'login2' => array('password' => 'cf4578943c7db66051404d5c2b535c7f', 'name' => 'Имя пользователя 2'),
);

if(!isset($_SESSION['user']) && isset($_COOKIE['login']) && isset($_COOKIE['password'])
    && isset($users[$_COOKIE['login']]) && getPassword($users[$_COOKIE['login']]['password']) == $_COOKIE['password']) {
    //если нет сессии пользователя, но есть куки с пользовательским логином и паролем
    //проходим аторизацию
    $_SESSION['user'] = $_COOKIE['login'];
}

define('AUTH', isset($_SESSION['user']) && isset($users[$_SESSION['user']])); //флаг аторизованы мы или нет
$user = AUTH ? $users[$_SESSION['user']] : null;


$message = '';
if(!empty($_SESSION['message'])) {
    $message = $_SESSION['message'];
    unset($_SESSION['message']);
}

Я не пойму, какой тут логин и пароль у пользователя, или как добавить собственного пользователя с паролем.
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
@JohnDidact
Нуб во всём
login.php

<?php
include __DIR__.'/config.php';

if(!AUTH) {
  //мы еще не авторизованы
  if(!empty($_POST['login']) && !empty($_POST['password']) && isset($users[$_POST['login']])) {
      //передали данные для входа и логин существует
      if($users[$_POST['login']]['password'] == getPassword($_POST['password'])) {
          //пароль совпадает
          $_SESSION['user'] = $_POST['login'];

          if(isset($_POST['remember'])) {
            //стоит галка "запомнить меня"
            setcookie('login', $_POST['login'], time() + 3600 * 24 * 365, '/');
            setcookie('password', getPassword($users[$_POST['login']]['password']), time() + 3600 * 24 * 365, '/');
          }

      }
  }
  if(!isset($_SESSION['user']) || $_SESSION['user'] != $_POST['login']) {
    //авторизация не прошла, сохраним ошибку
    $_SESSION['message'] = 'Неверный логин или пароль';
  }
} else {
    if(isset($_GET['logout'])) { //выход из системы
        unset($_SESSION['user']);
        setcookie('login', '', time() - 3600 * 24 * 365, '/');
        setcookie('password', '', time() - 3600 * 24 * 365, '/');
    }
}

header('Location: index.php'); //переходим на главную страницу


Тот "метод", что описан в статье, думаю, использовать крайне глупо…
Если у тебя возникают такие вопросы, то тебе не на Q&A ресурсы нужно, а не обучающие. Могу посоветовать книгу Котерова и Костарёва, прочти от начала до конца и вопрос таких возникать не будет. Ещё, в добавок, рекомендую посмотреть видео-уроки "Специалист PHP" все уровни. Очень доступно и интересно подаётся материал, на мой взгляд. Я, конечно, не спец в этом, так как лентяй (поэтому до конца не дочитал и видео-уроки не досмотрел), но основы понял. Тебе же советую не останавливаться, а пройти все курсы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы