5 бесплатных форм входа и регистрации на сайте HTML5 и CSS3

Введение

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

Flask — это микрофреймворк, что предполагает создание проекта по модулям.

Ниже мы построим личный кабинет с авторизацией.

Описание веток

sozdanie-formy-registratsii-i-avtorizatsii-v-php – В этой ветке находятся исходники функционала, который был реализован в статье Создание формы регистрации и авторизации

5 бесплатных форм входа и регистрации на сайте html5 и css3

<div id="range1">

<div class="outer">
  <div class="middle">
    <div class="inner">

        <div class="login-wr">
          <h2>Вход</h2>
          
          <div class="form">
            <input type="text" placeholder="Пользователь">
            <input type="password" placeholder="Пароль">
            <button> Авторизация </button>
            <a href="#"> <p> У вас нет аккаунта? Регистрация </p></a>
          </div>
        </div>

    </div>
  </div>
</div>

</div>


<div id="range2">

<div class="outer">
  <div class="middle">
    <div class="inner">

        <div class="login-wr">
          <h2>Вход</h2>
          
          <div class="form">
            <input type="text" placeholder="Пользователь">
            <input type="password" placeholder="Пароль">
            <a href="#"> <p> У вас нет аккаунта? Регистрация </p></a>
            <button> Авторизация </button>
          </div>
        </div>

    </div>
  </div>
</div>

</div>



<div id="range3">

<div class="outer">
  <div class="middle">
    <div class="inner">

        <div class="login-wr">
          <div id="logo"></div>
          
          <div class="form">
            <input type="text" placeholder="Пользователь">
            <input type="password" placeholder="Пароль">
            <a href="#"> <p> У вас нет аккаунта? Регистрация </p></a>
            <button> Авторизация </button>
          </div>
        </div>

    </div>
  </div>
</div>

</div>



<div id="range4">

<div class="outer">
  <div class="middle">
    <div class="inner">

        <div class="login-wr">
          <div id="logo"></div>
          
          <div class="form">
            <input type="text" placeholder="Пользователь">
            <input type="password" placeholder="Пароль">
            <a href="#"> <p> У вас нет аккаунта? Регистрация </p></a>
            <button> Вход </button>
          </div>
        </div>

    </div>
  </div>
</div>

</div>




<div id="range5">

<div class="outer">
  <div class="middle">
    <div class="inner">

        <div class="login-wr">
          <h2>Вход</h2>
          <div class="form">
            <input type="text" placeholder="Пользователь">
            <input type="password" placeholder="Пароль">
            <button> Вход </button>
          </div>
        </div>

    </div>
  </div>
</div>

</div>
@import url('https://fonts.googleapis.com/css?family=Open Sans|Roboto');

html, body {
    height : 100%;
    padding: 0;
    margin: 0;
}

body{
    font-family: 'Roboto', sans-serif;
    font-size: 14px;
}

.outer {
    display: table;
    width: 100%;
    height: 100%;
    text-align: center;
}
.middle {
    display: table-cell;
    vertical-align: middle;
}
.inner {
    text-align: center;
    width: auto;
    padding: 0 15px;
}

#range1 {
    background: url("img/vertical_cloth.png") repeat left top;
    height: 100%;
    min-height: 400px;
}

#range2 {
    background : #29475f;
    height: 100%;
    min-height: 400px;
}

#range3 {
    background: url("img/maxresdefault.jpg") no-repeat left top;
    height: 100%;
    min-height: 400px; 
}

#range4 {
    background: rgba(212,228,239,1);
    background: -moz-linear-gradient(left, rgba(212,228,239,1) 0%, rgba(134,174,204,1) 100%);
    background: -webkit-gradient(left top, right top, color-stop(0%, rgba(212,228,239,1)), color-stop(100%, rgba(134,174,204,1)));
    background: -webkit-linear-gradient(left, rgba(212,228,239,1) 0%, rgba(134,174,204,1) 100%);
    background: -o-linear-gradient(left, rgba(212,228,239,1) 0%, rgba(134,174,204,1) 100%);
    background: -ms-linear-gradient(left, rgba(212,228,239,1) 0%, rgba(134,174,204,1) 100%);
    background: linear-gradient(to right, rgba(212,228,239,1) 0%, rgba(134,174,204,1) 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#d4e4ef', endColorstr='#86aecc', GradientType=1 );
    height: 100%;
    min-height: 400px; 
}

#range5 {
    background: rgba(77, 56, 75, 1);
    background: -moz-linear-gradient(left, rgba(77, 56, 75, 1) 0%, rgba(36, 54, 90, 1) 100%);
    background: -webkit-gradient(left top, right top, color-stop(0%, rgba(77, 56, 75, 1)), color-stop(100%, rgba(36, 54, 90, 1)));
    background: -webkit-linear-gradient(left, rgba(77, 56, 75, 1) 0%, rgba(36, 54, 90, 1) 100%);
    background: -o-linear-gradient(left, rgba(77, 56, 75, 1) 0%, rgba(36, 54, 90, 1) 100%);
    background: -ms-linear-gradient(left, rgba(77, 56, 75, 1) 0%, rgba(36, 54, 90, 1) 100%);
    background: linear-gradient(to right, rgba(77, 56, 75, 1) 0%, rgba(36, 54, 90, 1) 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#4d384b', endColorstr='#24365a', GradientType=1 );
    height: 100%;
    min-height: 400px; 
}

#range1 .login-wr {
    position: relative;
    margin: 0 auto;
    background: #ecf0f1;
    max-width: 350px;
    border-radius: 5px;
    border-top: 4px solid #e74c3c;
    box-shadow: 3px 3px 10px #333;
    padding: 15px;
}

#range1 h2 {
    text-align: center;
    font-weight: 200;
    font-size: 2em;
    margin-top: 10px;
    color: #34495e;
}

#range1 .form {
    padding-top: 20px;
    text-align: center;
}

#range1 input[type="text"], 
#range1 input[type="password"],
#range1 button {
    width: 80%;
    margin-bottom: 25px;
    height: 40px;
    border-radius: 5px;
    outline: 0;
    -moz-outline-style: none;
}
      
#range1 input[type="text"],
#range1 input[type="password"] {
    border: 1px solid #bbb;
    padding: 0 0 0 10px;
    font-size: 14px;
}

#range1 a {
    text-align: center;
    font-size: 12px;
    color: #3498db;
}
      
#range1 button {
    background: #e74c3c;
    border:none;
    color: white;
    font-size: 18px;
    font-weight: 200;
    cursor: pointer;
    transition: box-shadow .4s ease;
}

    
#range2 .login-wr {
    position: relative;
    margin: 0 auto;
    background: #fff;
    max-width: 350px;
    box-shadow: 3px 3px 10px #333;
    padding: 15px 15px 0 15px;
}

#range2 h2 {
    text-align: left;
    font-weight: 200;
    font-size: 1.6em;
    margin: 0 0 10px 0;
    padding: 0 0 10px 0;
    border-bottom: 1px solid #eeeeee;
    color: #474747;
}

#range2 .form {
    padding-top: 20px;
    text-align: center;
}

#range2 input[type="text"], 
#range2 input[type="password"],
#range2 button {
    margin-bottom: 25px;
    height: 40px;
    outline: 0;
    -moz-outline-style: none;
}
      
#range2 input[type="text"] {
    background: url("img/user.png") no-repeat left 10px center;    
}
#range2 input[type="password"] {
    background: url("img/pencil.png") no-repeat left 10px center;    
}

#range2 input[type="text"],
#range2 input[type="password"] {
    width: calc(80% - 45px);
    border: 1px solid #bbb;
    padding: 0 0 0 45px;
    font-size: 14px;
}

#range2 input[type="text"]:focus,
#range2 input[type="password"]:focus {
    border: 1px solid #2196f3;
}  
      
#range2 a {
    text-align: center;
    font-size: 12px;
    color: #3498db;
}
      
#range2 button {
    width: 80%;
    background: #2196f3;
    border: none;
    border-bottom: 5px solid #2184d7;
    color: white;
    font-size: 18px;
    font-weight: 200;
    cursor: pointer;
    transition: box-shadow .4s ease;
}

#range2 p {
	padding-bottom: 10px;
}

#range3 .login-wr {
    position: relative;
    margin: 0 auto;
    background: rgba(0, 0, 0, 0.7);
    max-width: 270px;
    box-shadow: 3px 3px 10px #333;
    padding: 15px 15px 0 15px;
}

#range3 #logo {
    height: 208px;
    background: url("img/if_football_172468.png") no-repeat center top 30px;
    text-align: left;
    font-weight: 200;
    font-size: 1.6em;
    margin: 0 0 10px 0;
    padding: 0 0 10px 0;
    color: #474747;
}

#range3 .form {
    padding-top: 20px;
    text-align: center;
}

#range3 input[type="text"], 
#range3 input[type="password"],
#range3 button {
    margin-bottom: 25px;
    height: 40px;
    outline: 0;
    -moz-outline-style: none;
}
      
#range3 input[type="text"] {
    background: url("img/user2.png") no-repeat left 10px center;    
}
#range3 input[type="password"] {
    background: url("img/pencil2.png") no-repeat left 10px center;    
}

#range3 input[type="text"],
#range3 input[type="password"] {
    width: calc(80% - 50px);
    border: none;
    border-bottom: 1px solid #666;
    padding: 0 0 0 50px;
    font-size: 14px;
}

#range3 input[type="text"]:focus,
#range3 input[type="password"]:focus {
    border-bottom: 1px solid #ccc;
    color: #eee;
}  
    
#range3 a {
    text-align: center;
    font-size: 12px;
    color: #eee;
}
      
#range3 button {
    width: 80%;
    background: none;
    border:none;
    border: 1px solid #666;
    color: white;
    font-size: 18px;
    font-weight: 200;
    cursor: pointer;
    transition: box-shadow .4s ease;
}

#range3*::-webkit-input-placeholder {
    color: #666;
}

#range3 *:-moz-placeholder {
    color: #666;
}

#range3 *::-moz-placeholder {
    color: #666;
}

#range3 *:-ms-input-placeholder {
    color: #666; 
}

#range3 p {
	padding-bottom: 10px;
}

#range4 .login-wr {
    position: relative;
    margin: 0 auto;
    background: rgba(0, 0, 0, 0.7);
    max-width: 270px;
    box-shadow: 3px 3px 10px #333;
    padding: 0 15px 0 15px;
}

#range4 #logo {
    height: 208px;
    background: url("img/if_Settings-5_379427.png") no-repeat center top;
    text-align: left;
    font-weight: 200;
    font-size: 1.6em;
    margin: 0 0 40px 0;
    padding: 0 0 10px 0;
    color: #474747;
}

#range4 .form {
    padding-top: 20px;
    text-align: center;
}

#range4 input[type="text"], 
#range4 input[type="password"],
#range4 button {
    margin-bottom: 25px;
    height: 40px;
    outline: 0;
    -moz-outline-style: none;
}
      
#range4 input[type="text"] {
    background: url("img/user2.png") no-repeat left 10px center;    
}

#range4 input[type="password"] {
    background: url("img/pencil2.png") no-repeat left 10px center;    
}

#range4 input[type="text"],
#range4 input[type="password"] {
    width: calc(80% - 50px);
    border: none;
    border-bottom: 1px solid #666;
    padding: 0 0 0 50px;
    font-size: 14px;
}

#range4 input[type="text"]:focus,
#range4 input[type="password"]:focus {
    border-bottom: 1px solid #ccc;
    color: #eee;
}  
    
#range4 a {
    text-align: center;
    font-size: 12px;
    color: #eee;
} 

#range4 p {
    padding-bottom: 10px;
}
           
#range4 button {
    width: 80%;  
    background: #fa5655;
    border:none;
    color: white;
    font-size: 18px;
    font-weight: 200;
    cursor: pointer;
    transition: box-shadow .4s ease;
}

#range4*::-webkit-input-placeholder {
    color: #ccc;
}

#range4 *:-moz-placeholder {
    color: #ccc;
}

#range4 *::-moz-placeholder {
    color: #ccc;
}

#range4 *:-ms-input-placeholder {
    color: #ccc; 
}

#range5 .login-wr {
    position: relative;
    margin: 0 auto;
    max-width: 270px;
    padding: 0 15px 0 15px;
}

#range5 h2 {
    font-weight: 200;
    font-size: 1.6em;
    margin: 0;
    padding: 0;
    color: #eee;
}

#range5 .form {
    padding-top: 20px;
    text-align: center;
}

#range5 input[type="text"], 
#range5 input[type="password"],
#range5 button {
    margin-bottom: 25px;
    height: 40px;
    outline: 0;
    -moz-outline-style: none;
}
      
#range5 input[type="text"] {
    background: url("img/user2.png") no-repeat left 10px center;    
}

#range5 input[type="password"] {
    background: url("img/pencil2.png") no-repeat left 10px center;    
}

#range5 input[type="text"],
#range5 input[type="password"] {
    width: calc(80% - 50px);
    border: none;
    border-bottom: 1px solid #666;
    padding: 0 0 0 50px;
    font-size: 14px;
}

#range5 input[type="text"]:focus,
#range5 input[type="password"]:focus {
    border-bottom: 1px solid #ccc;
    color: #eee;
}  
    
#range5 a {
    text-align: center;
    font-size: 12px;
    color: #eee;
}  

#range5 p{
    padding-bottom: 10px;
}
      
#range5 button {
    width: 80%;  
    background: none;
    border:none;
    border: 1px solid #666;
    color: white;
    font-size: 18px;
    font-weight: 200;
    cursor: pointer;
    transition: box-shadow .4s ease;
}

#range5*::-webkit-input-placeholder {
    color: #ccc;
}

#range5 *:-moz-placeholder {
    color: #ccc;
}

#range5 *::-moz-placeholder {
    color: #ccc;
}

#range5 *:-ms-input-placeholder {
    color: #ccc; 
}

Похожее:  Инструкция по входу на rutracker.org: февраль 2021 г.

Blueprint

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

В файл app/__init__.py нужно добавить:

Config

Для того, чтобы все работало нам нужно добавить данные в файл конфига config-extended. К этому моменты вы должны были ознакомиться с конфигурационными файлами Flask.

Содержимое конфига:

С другими директивами можно ознакомиться в официальном источнике.

Html и css шаблоны персональных сайтов

Index.html

Файл index.html у нас выступит формой входа:

Содержимое файла может быть таким:

Templates/security

Когда было установлено расширение Flask-Security в директории templates появилась директория security, а в ней следующие файлы:

Файлы могли и не появиться после установки. Тогда их можно перенести вручную. Путь указан ниже.

Подробно на них останавливаться не будем. Скажу лишь, что эти файлы переопределяют шаблоны расширения Flask-Security.

Шаблоны, которые они расширяют находятся здесь:

/venv/lib/python3.8/site-packages/flask_security/templates/security

Если какой-то из шаблонов хочется поменять, его нужно скопировать оттуда к себе в директорию security. И дальше можно его менять.

Вход в админку

Теперь у нас есть админка. Заходим по адресу:

Подключение к базы данных

В корневую папку сайта, создаем файл с названием “dbconnect.php”. В этом файле, добавляем следующий код:

  <?php
      // Указываем кодировку
      header('Content-Type: text/html; charset=utf-8');

      $server = "localhost"; /* имя хоста (уточняется у провайдера), если работаем на локальном сервере, то указываем localhost */
      $username = "имя_пользователя_бд"; /* Имя пользователя БД */
      $password = "пароль_пользователя_бд"; /* Пароль пользователя, если у пользователя нет пароля то, оставляем пустым */
      $database = "имя_базы_данных"; /* Имя базы данных, которую создали */

      // Подключение к базе данный через MySQLi
      $mysqli = new mysqli($server, $username, $password, $database);

      // Проверяем, успешность соединения. 
      if ($mysqli->connect_errno) {
              die("<p><strong>Ошибка подключения к БД</strong></p><p><strong>Код ошибки: </strong> ". $mysqli->connect_errno ." </p><p><strong>Описание ошибки:</strong> ".$mysqli->connect_error."</p>");
      }

      // Устанавливаем кодировку подключения
      $mysqli->set_charset('utf8');

      //Для удобства, добавим здесь переменную, которая будет содержать название нашего сайта
      $address_site = "http://testsite.local";
  ?>

Пример шаблона формы регистрации html

Давайте посмотрим, как выглядит один из шаблонов формы регистрации html – выберем – registration_template_1.rar

Специально, чтобы вы смогли посмотреть – расположил данный шаблон регистрации на сайте :

Пример шаблона формы регистрации html
Пример шаблона формы регистрации html

Создаем анимацию


Первое, что мы сделаем, мы спрячем вторую форму, назначив opacity на 0:

#register{
    z-index: 21;
    opacity: 0;
}

Помните, что форма входа имеет параметр z-index: 22? Второй форме мы назначим этот параметр на 21, чтобы поставить его “под” форму входа.

Теперь самое интересное: меняем формы местами, используя псевдо класс :target. Вам нужно понять одну вещь по поводу :target: для перемещения мы будем использовать якоря. Нормальное поведение якоря — прыжок на определенный элемент страницы. Но мы не хотим этого, мы лишь хотим поменять формы местами.

И тут приходит на помощь наш трюк с использованием двух ссылок в начале страницы. Вместо того, чтобы направить нас прямо на вторую форму, рискуя испытать эффект “прыжка”, мы придадим ссылкам параметр display: none. Это поможет избежать прыжков. Я обнаружил этот трюк на сайте: CSS3 create (французский язык).

#toregister:target ~ #wrapper #register,
#tologin:target ~ #wrapper #login{
    z-index: 22;
    animation-name: fadeInLeft;
    animation-delay: .1s;
}

Вот, что происходит: когда мы кликаем на кнопку Присоединиться, мы направляемся на #toregister. Затем происходит анимация и лишь потом переходим на элемент #register. Мы используем анимацию под названием fadeInLeft. Так как мы “прячем” форму, используя нулевую прозрачность, мы применим анимацию, которая будем постепенно появляться.

Мы также изменили z-index, чтобы она появилась поверх другой формы. То же самое происходит для другой формы same happens for the other form.Вот код для анимации. Мы использовали CSS3 animation framework от Dan Eden и адаптировали этот фреймворк под наш туториал.

Создаем модели для базы данных

Создаем файл:app/models.py

Внутри которого пишем:

fromdatetimeimportdatetime
from

flask_login

import

UserMixin

from

flask_security

import

RoleMixin

from

app

import

db

,

login_manager

from

werkzeug.

securityimport

generate_password_hash

,

check_password_hash

roles_users = db.Table(
‘roles_users’,
db.Column(‘user_id’, db.Integer(), db.ForeignKey(‘users.id’)),
db.Column(‘role_id’, db.Integer(), db.ForeignKey(‘roles.id’))
)

class Role(db.Model, RoleMixin):
__tablename__ =‘roles’
id= db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))

    def__str__(self):
returnself.name

class User(db.Model, UserMixin):
__tablename__ =‘users’
id= db.Column(db.Integer, unique=True, primary_key=True)
name = db.Column(db.String)
username = db.Column(db.String, unique=True)
email= db.Column(db.String, unique=True)
password = db.Column(db.String)
created_on = db.Column(db.DateTime(), default=datetime.utcnow)
updated_on = db.Column(db.DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)
# Нужен для security!
active = db.Column(db.Boolean())
# Для получения доступа к связанным объектам
roles = db.relationship(‘Role’, secondary=roles_users, backref=db.backref(‘users’, lazy=‘dynamic’))

    # Flask – Login
@property
def is_authenticated(self):
returnTrue

    @property
def is_active(self):
returnTrue

    @property
def is_anonymous(self):
returnFalse

    # Flask-Security
def has_role(self, *args):
returnset(args).issubset({role.namefor role inself.roles})

    def get_id(self):
returnself.id

    # Required for administrative interface
def__unicode__(self):
returnself.username

    def set_password(self, password):
self.password= generate_password_hash(password)

    def check_password(self, password):
return check_password_hash(self.password, password)

# Отвечает за сессию пользователей. Запрещает доступ к роутам, перед которыми указано @login_required
@login_manager.user_loader
def load_user(user_id):
return db.session.query(User).get(user_id)

Разберем код.

Создание форм регистрации и авторизации на php

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

Мы рассмотрим процесс создания простых форм для регистрации и авторизации пользователей. Регистрационная форма будет содержать поля для ввода имени, пароля и адреса электронной почты. Имя пользователя и адрес электронной почты при этом должны быть уникальными для каждого конкретного пользователя. В случае попытки регистрации второй учетной записи с таким же именем пользователя (или электронной почтой) будет выводиться сообщение об ошибке с пояснением о том, что такие данные уже используются в системе.

Ниже приведен HTML-код необходимый для создания формы регистрации. Сохраните его вфайле register.php.

Несмотря на простоту данной формы, для проведения простейшей валидации данных в ней используется HTML5. К примеру, использование type=”email” обеспечит уведомление пользователя о том, что он неправильно ввел адрес электронной почты. Кроме того, применение pattern позволит провести проверку имени пользователя – логин может состоять только из латинских букв и цифр.

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

HTML-код страницы входа в систему приведен ниже. Сохраните его в файле login.php.

Для улучшения внешнего вида форм примените к ним следующие CSS-стили:

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

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

  1. Порядковый номер ID, который для каждого нового пользователя увеличивается автоматически.
  2. Уникальное имя пользователя.
  3. Адрес электронной почты.
  4. Пароль.

Для быстрого создания таблицы базы данных можно использовать следующий SQL-запрос:

Теперь создайте файл config.php и сохраните в нем приведенный далее код для подключения к базе данных:

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

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

Сохраните приведенный далее код в начале файла registration.php:

<?php
    session_start();
    include('config.php');
    if (isset($_POST['register'])) {
        $username = $_POST['username'];
        $email = $_POST['email'];
        $password = $_POST['password'];
        $password_hash = password_hash($password, PASSWORD_BCRYPT);
        $query = $connection->prepare("SELECT * FROM users WHERE email=:email");
        $query->bindParam("email", $email, PDO::PARAM_STR);
        $query->execute();
        if ($query->rowCount() > 0) {
            echo '<p class="error">Этот адрес уже зарегистрирован!</p>';
        }
        if ($query->rowCount() == 0) {
            $query = $connection->prepare("INSERT INTO users(username,password,email) VALUES (:username,:password_hash,:email)");
            $query->bindParam("username", $username, PDO::PARAM_STR);
            $query->bindParam("password_hash", $password_hash, PDO::PARAM_STR);
            $query->bindParam("email", $email, PDO::PARAM_STR);
            $result = $query->execute();
            if ($result) {
                echo '<p class="success">Регистрация прошла успешно!</p>';
            } else {
                echo '<p class="error">Неверные данные!</p>';
            }
        }
    }
?>

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

Далее, с помощью $_POST[‘register’] мы проверяем, нажал ли пользователь кнопку «Регистрация». Следует помнить, что пароли нельзя сохранять в виде незашифрованного текста. Поэтому наш код использует функцию password_hash() и сохраняет пароль в хэшированном виде. Эта функция записывает пароль в базу данных в виде хэш-строки, состоящей из 60 случайных символов.

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

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

Приведенный далее код должен располагаться в начале файла login.php:

Важно отметить, что мы не проверяем правильность имени и пароля одновременно. Поскольку пароль сохранен в хэшированном виде, сначала необходимо запросить хэш с помощью предоставленного имени пользователя. Когда мы получим хэш, можно будет проверить предоставленный пользователем пароль на соответствие хэшированному – с помощью функции password_verify().

Как только мы получаем подтверждение правильности пароля, мы назначаем переменную $_SESSION[‘user_id’] для ID пользователя из базы данных. При необходимости на этом этапе передаются и значения для других переменных.

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

Все, что нужно сделать для ограничения или предоставления доступа – это использовать в начале приведенного выше скрипта строку session_start().

При использовании скрипта для ограничения доступа неавторизованных пользователей обычно возникают три типа ошибок.

Чаще всего ошибки в работе скрипта связаны с неверными именами переменных – как правило, с использованием букв в неправильном регистре. Именно поэтому крайне важно придерживаться одного и того же шаблона при выборе имен. К примеру, ключи в функции $_POST основаны на значениях, полученных из полей ввода в формах. Это означает, что $_POST[‘USERNAME’] и $_POST[‘username’] получат разные значения.

Некоторые функции, например session_start() и header(), изменяют HTTP-заголовки. Поскольку PHP сбрасывает все заголовки перед выводом любых данных, важно вызывать все подобные функции до того, как вы начнете что-либо выводить – включая фрагменты сырого HTML или случайные пробелы перед открывающим тегом <?php.

Вы можете использовать переменные сессии только в том случае, если на странице осуществлен вызов функции session_start(). Если значения суперглобальной переменной $_SESSION вам не доступны, причина этого заключается в том, что вы забыли вызвать session_start(). Помните о том, что функцию надо вызывать перед выводом чего-либо на страницу сайта. В противном случае вы получите ошибку «Заголовки уже отправлены», рассмотренную выше.

Пожалуйста, опубликуйте ваши комментарии по текущей теме статьи. За комментарии, подписки, дизлайки, отклики, лайки огромное вам спасибо!

Пожалуйста, опубликуйте свои мнения по текущей теме статьи. За комментарии, подписки, дизлайки, отклики, лайки низкий вам поклон!

Стилизуем формы, используя css3

Во-первых, давайте назначим нашим формам базовый стиль.

#subscribe,
#login{
    position: absolute;
    top: 0px;
    width: 88%;
    padding: 18px 6% 60px 6%;
    margin: 0 0 35px 0;
    background: rgb(247, 247, 247);
    border: 1px solid rgba(147, 184, 189,0.8);
    box-shadow:
        0pt 2px 5px rgba(105, 108, 109,  0.7),
        0px 0px 8px 5px rgba(208, 223, 226, 0.4) inset;
    border-radius: 5px;
}
#login{
    z-index: 22;
}

Мы добавили две тени к элементу: одна — с целью создать внутреннее голубое свечение, а вторая — внешняя тень. Чуть позже я объясню вам z-index.

Здесь мы назначим свойства для шапки:

Установка расширений

Flask-Login — расширение, которое обеспечит управление пользовательскими сеансами во Flask. Благодаря этому мы сможем входить и выходить из системы, ограничивать страницы авторизацией.

pip install Flask-Login

Шаблон формы регистрации с авторизацией забыли пароль

Следующий шаблон формы регистрации включает в себя:

Форму регистрации.

Форму авторизации.

Форму забыл пароль.

Посмотреть можно

Шаблон формы регистрации с авторизацией забыли пароль

Шаблон формы регистрации с авторизацией с картинкой справа

Нашел интересный шаблон ”
формы регистрации с авторизацией с картинкой справа
” – “AZURE”.

Поступили аналогично!

Шаблон формы регистрации с задним фоном

Следующий шаблон формы регистрации – с задним фоном! Что у нас есть для этой формы шаблона?

Как поменять “Картинку заднего фона”

Картинку в папке img – “bg-1.jpg” – открываем в любом редакторе фото, да хоть в

и поверх существующей картинки накладываем новое и сохраняем – это очень просто!

Далее измененное фото перемещаем на сервер в ту же папку, где она и лежала..

Далее перезагружаем шаблон формы входа.

Master-extended.html

Файлом master-extended.html мы расширяем админ панель. В конкретно данном случае добавляем кнопку выхода на админ панель справа:

Содержимое файла:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *