Форум программистов, компьютерный форум, киберфорум
Python: Flask
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 09.08.2021
Сообщений: 15

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

16.07.2023, 19:33. Показов 1712. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я новенький в Flask, хочу сделать авторизацию с помощью шаблона, mysql и Флеск.
Авторизация работает, куки выдаётся, но вот редирект на панель управления не работает. В журнале вроде как есть редирект, но в браузере - нету. После перезапуска страницы перенаправление работает отлично. Подозреваю методы POST и GET, но я не шарю.

Код main.py:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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 тоже не прокатил.)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.07.2023, 19:33
Ответы с готовыми решениями:

Перенаправление после успешной авторизации в зависимости от роли пользователя через класс LoginView()
Товарищи, всем доброго времени суток. Не так давно решил освоить Django, поэтому не обессудьте, вопросы будут достаточно простые, но при...

Создание MainForm после успешной авторизации
В общем застрял на следующем: есть 4 формы: MainForm, с которой происходит запуск Form2, Form3 и AuthForm, которая представляет собой...

Скрыть div после успешной авторизации
Все привет! В общем имеется код(смотрите ниже). Так вот, как сделать так, чтобы после успешнойавторизации форма входа скрывалась,...

1
0 / 0 / 0
Регистрация: 09.08.2021
Сообщений: 15
17.07.2023, 09:32  [ТС]
Актуально. Если как и в прошлый раз я плохо обьяснил, пишите, обьясню получше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.07.2023, 09:32
Помогаю со студенческими работами здесь

После успешной авторизации недоступен сайт на iis
Есть сайт на iis 10. До авторизации работает, после вода логина пароля ошибка ERR_HTTP2_PROTOCOL_ERROR. В логах последняя запись при...

Получение фото и имени пользователя после успешной авторизации Vk
Всем привет, у меня очередной вопрос, вот я сделал программу все отлично работает, Авторизирует на сайте Вконтакте ру. И мне хотелось бы...

Как сделать редирект на страницу после авторизации успешной?
Вопрос простой до безумия, тем более учитывая то, что у меня после авторизации уже выскакивает сообщение &quot;Успешно авторизованы&quot; ...

Скрыть форму входа на сайт, после успешной авторизации?
Как скрыть форму входа на сайт, после успешной авторизации??? И чтобы вместо входа стояла надпись &quot;Welcome, имя пользователя&quot;?? ...

Http запрос к Web-сервису после успешной авторизации
Привет всем! Нуждаюсь в помощи при создании правильного запроса. У меня клиент-приложение посылает запрос на Web-сервис, в результате в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru