@MrWoon3

Не работает переадресация после успешной авторизации?

Здравствуйте! Я новенький в Flask, хочу сделать авторизацию с помощью шаблона, mysql и Флеск.
Авторизация работает, куки выдаётся, но вот редирект на панель управления не работает. В журнале вроде как есть редирект, но в браузере - нету. После перезапуска страницы перенаправление работает отлично. Подозреваю методы POST и GET, но я не шарю.
from flask import Flask, render_template, request, redirect, url_for, make_response, send_file
import mysql.connector
import hashlib
import time
import datetime
 
app = Flask(__name__)
 
chars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '"', '#', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~']
 
@app.route('/control/', methods=["GET"])
def control():
    r = "error"
    if request.cookies.get('token') is None:
        ret = "Ты хто?)"
    else:
        login = request.cookies.get('token').split("$")[0]
        password = request.cookies.get('token').split("$")[1]
        uid = request.cookies.get('token').split("$")[2]
 
        ret = auth(login, password)
        if ret != "False":
            r = make_response("Привет!")
    r.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
    return r
 
def auth(login, password):
    # Установка параметров подключения к базе данных
    config = {
        'user': 'тут юзер',
        'password': 'тут пароль',
        'host': 'хост',
        'database': 'бд'
    }
 
    # Установка соединения с базой данных
    connection = mysql.connector.connect(**config)
 
    # Создание объекта-курсора для выполнения SQL-запросов
    cursor = connection.cursor()
 
    query = "SELECT password FROM accounts WHERE `login` = %s"
    cursor.execute(query, (login,))
 
    res = ""
    # Получение результата запроса
    result = cursor.fetchone()
    if result:
        res = str(result[0]).strip()
 
    # Закрытие курсора и соединения
    query = "SELECT uid FROM accounts WHERE `login` = %s"
    cursor.execute(query, (login,))
 
    uuid = ""
    # Получение результата запроса
    result = cursor.fetchone()
    if result:
        uuid = str(result[0]).strip()
 
    cursor.close()
    connection.close()
    ret = "False"
    h = hashlib.sha256(str(password).encode('utf-8'))
    h.digest()
    if res == h.hexdigest():
        ret = "True"
    if ret == "True":
        ret = "True." + uuid
    if ret == "False":
        ret = "False"
    return ret
 
@app.route("/adminer", methods=["GET"])
def adminer():
    return send_file("adminer-4.8.1.php")
 
@app.route('/loginauth/', methods=["GET"])
def loginauth():
    pass
 
@app.route('/login/', methods=["POST", "GET"])
def login():
    if request.method == "POST":
        login = request.form['login']
        password = request.form['password']
        print("LOGPASS " + login)
        ret = auth(login, password)
        if ret == "False":
            error = 'Неверное имя пользователя или пароль'
            return render_template('auth.html', error=error)
        else:
            # Создаем объект ответа
            response = make_response(redirect(url_for("control"), code=303))
            # Устанавливаем cookie с именем пользователя
            response.set_cookie('token', login + "$" + password + "$" + ret.split(".")[1], expires=datetime.datetime.now() + datetime.timedelta(hours=1))
    
            return response
    if request.method == 'GET':
        if request.cookies.get('token') is None:
            r = render_template("auth.html")
        else:
            login = request.cookies.get('token').split("$")[0]
            password = request.cookies.get('token').split("$")[1]
            uid = request.cookies.get('token').split("$")[2]
 
            ret = auth(login, password)
            if ret != "False":
                r = redirect(url_for("control"))
            else:
                r = render_template("auth.html")
        return r


Шаблон кидать не буду, обычтная форма, она работает, я проверял. БД и т.д тоже работает, как я и говорил куки выдаётся даже при успешной авторизации. Но вот ошибки при не верном логине нету, и самое главное - редиректа на страницу control. (п.с - пробовал делать редирект кодом 307 и вообще без кода (дефолт), не работает. Рендер шаблона с перенаправлением с помощью мета тэга html тоже не прокатил.)
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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