Скачиваний:
1
Добавлен:
28.12.2024
Размер:
126.31 Кб
Скачать

Приложение

Приложение 1

from flask import Flask, request, render_template, redirect, url_for, session

import psycopg2

from psycopg2 import sql

import bcrypt

app = Flask(__name__)

app.secret_key = 'supersecretkey'

DB_CONFIG = {

'dbname': 'authdb',

'user': 'authuser',

'password': 'securepassword',

'host': 'localhost'

}

def init_db():

conn = psycopg2.connect(**DB_CONFIG)

cur = conn.cursor()

cur.execute("""

CREATE TABLE IF NOT EXISTS users (

id SERIAL PRIMARY KEY,

username VARCHAR(100) UNIQUE NOT NULL,

password_hash VARCHAR(200) NOT NULL

);

""")

conn.commit()

cur.close()

conn.close()

@app.route('/', methods=['GET', 'POST'])

def login():

if request.method == 'POST':

username = request.form['username']

password = request.form['password']

conn = psycopg2.connect(**DB_CONFIG)

cur = conn.cursor()

cur.execute("SELECT password_hash FROM users WHERE username = %s", (username,))

user = cur.fetchone()

cur.close()

conn.close()

if user and bcrypt.checkpw(password.encode('utf-8'), user[0].encode('utf-8')):

session['username'] = username

return redirect(url_for('welcome'))

return "Неверное имя пользователя или пароль"

return render_template('login.html')

@app.route('/welcome')

def welcome():

if 'username' in session:

return f"Привет, {session['username']}!"

return redirect(url_for('login'))

@app.route('/register', methods=['GET', 'POST'])

def register():

if request.method == 'POST':

username = request.form['username']

password = request.form['password']

hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')

conn = psycopg2.connect(**DB_CONFIG)

cur = conn.cursor()

try:

cur.execute("INSERT INTO users (username, password_hash) VALUES (%s, %s)", (username, hashed_password))

conn.commit()

except psycopg2.IntegrityError:

conn.rollback()

return "Имя пользователя уже существует"

finally:

cur.close()

conn.close()

return redirect(url_for('login'))

return render_template('login.html')

if __name__ == '__main__':

init_db()

app.run(host='0.0.0.0', port=8000)

Приложение 2

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Авторизация</title>

<style>

body {

background-color: #f0f8ff;

color: #000000;

font-family: Arial, sans-serif;

text-align: center;

padding: 50px;

}

form {

display: inline-block;

margin: auto;

text-align: left;

}

button {

cursor: pointer;

}

</style>

</head>

<body>

<h1>Добро пожаловать!</h1>

<form method="POST">

<label for="username">Имя:</label><br>

<input type="text" id="username" name="username" required><br><br>

<label for="password">Пароль:</label><br>

<input type="password" id="password" name="password" required><br><br>

<button type="submit">Вход</button>

</form>

<br><br>

<ahref="/register"><button type="button">Регистрация</button></a>

</body>

</html>

Соседние файлы в предмете Основы построения сертифицированных защищенных баз данных РФ