Php авторизация mvc примеры

How to Signup User using PHP MVC with example

In this example we using Models, Views, Controller Structure for Registering an users data.

CREATE TABLE IF NOT EXISTS `register` ( `id` int(11) NOT NULL, `user_name` varchar(50) NOT NULL, `email_id` varchar(50) NOT NULL, `password` varchar(50) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Here is the view file index.php under register folder, for displaying the form which will be used for registering users data.

index.php

register/signup»> First name:

Last name:

Password:

To Register data in the database first we have to create a Controller file.

controller/register.php

 function index()< $this->view->render('register/index'); > function signup()< $user_name=$_POST['user_name']; $email_id=$_POST['email_id']; $password=$_POST['password']; $count=$this->model->check_user($user_name,$email_id); if($count > 0) < echo 'This User Already Exists'; >else< $data = array( 'id' =>null, 'user_name' =>$_POST['user_name'], 'email_id' =>$_POST['email_id'], 'password' =>$_POST['password'] ); $this->model->insert_user($data); > header('location:index'); > >

Here is the model file which we are using for Registering data to database.

The file register_model.php is created under Models folder

models/register_model.php

index_model.php

 public function check_user($user_name,$email_id) < $result= $this->db->select("SELECT * FROM `register` WHERE user_name = '".$user_name."' OR email_id = '".$email_id."'"); $count = count($result); return $count; > public function insert_user($data) < $this->db->insert('register', $data); > >

Path: localhost/project_folder_name/view_folder_name/view_filename Example: localhost/mvc/register/index

Источник

Создание движка на MVC. Создаем авторизацию.

Создание движка на MVC. Создаем авторизацию.

Всем привет, и мы продолжаем создавать наш движок на MVC, и сегодня мы создадим авторизацию.

Наши единички вывелись, все хорошо.

Откроем index.php логина в папке view.

Login

Action задан на метод run. Перейдем в контроллер login.php и добавим его

public function run() $this->model->run();
>

В модели логина уберем вывод единичек. Создадим метод run().

public function run() $sth = $this->db->prepare(«SELECT id FROM users WHERE login = :login AND password = MD5(:password)»);
$sth->execute(array(
‘:login’ => $_POST[‘login’],
‘:password’ => $_POST[‘password’]
));

$data = $sth->fetchAll();
$count = $sth = rowCount();
if($count > 0) Session::init();
Session::set(‘loggedIn’, true);
header(‘Location: ../dashboard’);
> else header(‘Location: ../login’);
>
>

Здесь мы используем PDO, и я опять же хочу напомнить, кто его не знает, смотрите на сайте статьи по этой теме.

Теперь в нашей базе mvc нам нужно создать таблицу users с 3 полями: id, login, password.

login и password будут типом varchar, login длиной 25, password длиной 32 символа, там будет хэш.

id будет primary key и autoincrement.

Добавим тестового пользователя с логином jesse и паролем — хэшированным логином.

В конструкторе модели логина вызовем родительский конструктор.

public function __construct()

Сейчас создадим новый файл dashboard.php в папке controllers, куда скопируем все из контроллера login кроме метода run.

class Dashboard extends Controller // .
public function index() $this-view->render(‘dashboard/index’);
>
>

В папке views создадим папку dashboard, где создадим файл index.php с таким содержанием.

В папке libs создадим файл Session.php

class Session public static function init() @session_start();
>

public static function set($key, $value) $_SESSION[$key] = $value;
>

public static function get($key) if(isset($_SESSION[$key]))
return $_SESSION[$key];
>

public static function destroy() // unset($_SESSION);
session_destroy();
>
>

Добавьте подключение этого файла в index.php после подключения базы данных.

Вызовем в конструкторе класса Dashboard метод init() класса Session.

public function __construct() parent::__construct();
Session::init();
$logged = Session::get(‘loggedIn’);
if($logged == false) Session::destroy();
header(‘Location: ../login’);
exit();
>
>

Также создадим метод logout() в классе dashboard.

public function logout() Session::destroy();
header(‘Location: ../login’);
exit();
>

Теперь перейдем в header.php и создадим там ссылку на выход в меню.

Теперь добавим вызов метода init() перед блоком с id=header

Все что осталось, определить константы в файле database.php.

define(‘DB_TYPE’, ‘mysql’);
define(‘DB_HOST’, ‘localhost’);
define(‘DB_NAME’, ‘mvc’);
define(‘DB_USER’, ‘root’);
define(‘DB_PASS’, »);

Теперь перейдите в файл Database.php и там измените подключение, подставив вместо значений константы, которые мы только что определили.

Итак, могу вас поздравить, мы только что сделали авторизацию. Спасибо за внимание и удачи!

Создано 07.08.2014 20:40:56

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 17 ):

    Михаил, отредактируйте код пожалуйста, а то в одну строчку всё.

    Можете написать статью про добавление комментариев на сайт через аякс?

    А что в этом сложного? Просто отправляйте запросы через JavaScript на сервер, где добавляйте комментарий. Если не понятно, то напишу.

    Сложного вроде бы ничего, вопрос только, куда пихать сам JavaScript, насколько я понял то во View (хотя это вроде как работа с сервером, так что это задача модели и контроллера), и подключать в хедер. Может статью не про коментарии, а просто доработать форму входа, сделать проверку логина на аяксе.

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

    «$this-view->render(‘dashboard/index’);» замените на «$this->view->render(‘dashboard/index’);». Также замените «$count = $sth = rowCount();» на «$count = $sth->rowCount();».

    Михаил а как сделать чтобы после авторизации .закрытия и открытия браузера(снова) авторизация пользователя сохранялась если можн ото подробный код .Спасибо

    Михаил, подскажите из-за чего данная ошибка вылетает после авторизации: Это главный контроллерЭто вид Fatal error: Call to a member function prepare() on null in C:\OpenServer\domains\mvc\models\login_model.php on line 7 Все делал как Вы описывали!

    Хотелось бы, чтобы последний абзац выглядел так — . Теперь перейдите в файл Database.php и там измените подключение к БД в конструкторе, подставив вместо имеющихся значений, константы которые мы только что определили. Вот так — public function __construct() < parent::__construct(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS); >Ибо сходу c кавычками и точечками, можна «дупля не отбить».))

    Warning: Missing argument 2 for Session::get(), called in H:\home\pdo.learn\www\controllers\dashboard.php on line 9 and defined in H:\home\pdo.learn\www\libs\session.php on line 9 постоянно висит А при logout’е орет что заголовок уже отправлен Warning: Cannot modify header information — headers already sent by (output started at H:\home\pdo.learn\www\libs\session.php:9) in H:\home\pdo.learn\www\controllers\dashboard.php on line 18

    Notice: Undefined property: Login_Model::$db in . models/login_model.php on line 13 Подскажите плиз, не могу разобраться вторые сутки. и еще одна: Fatal error: Call to a member function prepare() on a non-object in . models/login_model.php on line 13

    Все идеально работает, но когда логин хочет отработать, ссылается $sth = $this->db->prepare, к «db»

    Разобрался, переменная не так обозвана была, теперь другая ошибка Warning: Cannot modify header information — headers already sent by (output started at /home/c/cf59149/mysite.ru/public_html/libs/Controller.php:9) in /home/c/cf59149/mysite.ru/public_html/models/login_model.php on line 26 шлет на if($count > 0) < Session::init(); Session::set('loggedIn', true); header('Location: ../dashboard'); >else < header('Location: ../login'); >строчка «header(‘Location: ../login’);»

    Разобрался, теперь у меня ничего не происходит, чтобы в адресную строку не вводил, не dashboard, не login, не login/run

    Подскажите как исправить ошибку «Вызов неопределённой функции rowCount(). Fatal error: Call to undefined function rowCount() in Z:\home\privet.local\www\models\login_model.php on line 12 Спасибо.

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Безопасная авторизация пользователей на MVC и PHP

    В этой статье мы разберем, как сделать авторизацию на MVC. Будет использоваться вот такая база данных: Первым делом, добавим маршруты в файле routes.php, он находится в папке config. Задаем следующие маршруты:

    'user/login' => 'user/login', 'user/logout' => 'user/logout',

    Теперь заходим в папку controllers и открываем файл UserController. В нем нам нужно написать метод для отрисовки страницы авторизации, метод для выхода их системы и функцию, которая будет сравнивать пароли. Метод Login. Чтобы избежать ошибок сразу объявим переменные email и password. Далее, если нажали кнопку «Войти», то методом POST получаем введенные в форме данные:

    public function actionLogin() < $email = false; $password = false; if (isset($_POST['submit'])) < $email = $_POST['email']; $password = $_POST['password']; $errors = false;

    Функциями checkEmail и checkPassword проверяем полученные данные на корректность ввода. Эти функции были описаны в уроке по созданию регистрации. С помощью функции checkUserDataHash делаем запрос в базу данных по введенному адресу электронной почты, в результате получаем все данные пользователя с таким адресом электронной почты в переменную check. Затем записываем пароль найденного пользователя в переменную hashed_password, а его id в переменную userId:

     $errors[] = 'Неправильный email'; > if (!User::checkPassword($password)) < $errors[] = 'Пароль не должен быть короче 6-ти символов'; >$check = User::checkUserDataHash($email); $hashed_password = $check['password']; $userId = $check['id'];

    Далее с помощью функции verify проверяем, совпал ли введенный пароль с паролем пользователя найденного по email. Если совпал, то используем функцию auth, которая будет описана далее, а затем возвращаем пользователя на главную страницу. Но если пароль не совпал, то в массив errors записываем сообщение об ошибке:

     if ($this->verify($password, $hashed_password)) < User::auth($userId); require_once(ROOT . '/user/index.php'); return true; >else $errors[] = 'Неправильные данные для входа на сайт'; > require_once(ROOT . '/user/login.php'); return true; >

    Метод Logout. Тут мы удаляем переменную сессии user, затем перенаправляем пользователя на главную страницу.

    public function actionLogout() < unset($_SESSION["user"]); session_destroy(); header("Location: /"); return true; >

    Функция verify. Хеширует введенный пароль, сравнивает его с паролем из БД, если пароль совпал, то возвращает true, иначе false.

    function verify($password, $hashedPassword)

    Переходим в папку models и открываем файл Users.php. Там создаем следующие функции: checkUserDataHash – функция, которая ищет пользователя по введенному адресу электронной почты, использует обычный предподготовленный запрос:

    public static function checkUserDataHash($email) < // Соединение с БД $db = Db::getConnection(); // Текст запроса к БД $sql = 'SELECT * FROM users WHERE email = :email'; // Получение результатов. Используется подготовленный запрос $result = $db->prepare($sql); $result->bindParam(':email', $email, PDO::PARAM_STR); // Указываем, что хотим получить данные в виде массива $result->setFetchMode(PDO::FETCH_ASSOC); $result->execute(); return $result->fetch(); >

    Функция auth. При удачной авторизации записывает в переменную сессии значение переменной userId, которое было получено в методе Login.

    public static function auth($userId) < // Записываем идентификатор пользователя в сессию $_SESSION['user'] = $userId; >

    Функция isGuest. Проверяет, существует ли переменная user, если да, то это значит, что пользователь авторизирован и он не гость, поэтому отправляет false. Если же переменной не существует, то отправляет true – пользователь гость

    public static function isGuest()

    Теперь напишем саму страницу, которая будет содержать форму авторизации. Тут, как и в форме регистрации будет выводиться ошибки, которые могут возникнуть в процессе авторизации. Делается это с помощью цикла foreach, который выводит содержимое массива errors:

    Теперь проверяем, если пользователь гость, то есть неавторизированный пользователь, то показываем ему форму авторизации. Если же пользователь авторизирован, то показываем ему сообщение «Вы уже авторизированы».

      

    Авторизация


    "/>


    "/>


    Если вы еще по какой то причине не зарегистрированы на нашем сервисе, то не теряйте времени зарегистрируйтесь.

    Вы уже авторизированы

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

    Источник

    Читайте также:  Цвета на c sharp
    Оцените статью