Мой вход в приложение flask не работает должным образом

#python #flask

#python #flask

Вопрос:

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

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

Что я могу теперь сделать?

Вот мои заголовки приложений и маршрут входа:

 from cs50 import SQL
from math import ceil
from flask import Flask, flash, redirect, render_template, request, session
from flask_session import Session
from tempfile import mkdtemp
from werkzeug.security import check_password_hash, generate_password_hash
from helpers import intro_alert, main_alert, login_required, usd, ex_separator, separator, 
                    cmc_logo, exchange_rates, cmc_quote, cmc_listing, cmc_info, exchanges, exchange_pairs, cmc_projects


coinjito = Flask(__name__)
coinjito.config["TEMPLATES_AUTO_RELOAD"] = True


@coinjito.after_request
def after_request(response):

    response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    response.headers["Expires"] = 0
    response.headers["Pragma"] = "no-cache"

    return response


coinjito.config["SESSION_FILE_DIR"] = mkdtemp()
coinjito.config["SESSION_PERMANENT"] = False
coinjito.config["SESSION_TYPE"] = "filesystem"
Session(coinjito)

@coinjito.route("/login", methods=["GET", "POST"])
def login():

    session.clear()

    if request.method == "GET":

        return render_template("login.html")

    else:

        rows = db.execute("SELECT * FROM users WHERE username=:username",
                          username=request.form.get("username"))

        if len(rows) != 1 or not check_password_hash(rows[0]["password"], 
                                                     request.form.get("password")):

            return intro_alert("Apology", "alert-danger", "Login Failed",
                             "Invalid username and/or password.", "/login", "Go Back")

        session["user_id"] = rows[0]["id"]
        session["username"] = rows[0]["username"]

        return redirect("/tracking")

@coinjito.route("/tracking")
@login_required
 

И вот моя вспомогательная функция входа в систему:

 def login_required(f):

    @wraps(f)
    def decorated_function(*args, **kwargs):

        if session.get("user_id") is None:

            return redirect("/login")

        return f(*args, **kwargs)

    return decorated_function
 

Комментарии:

1. Вы проверили на своем рабочем столе режим разработчика [F12] в вашем браузере? итак, вы говорите, что это не работает с маленьким экраном.?

2. Кажется, удаление «config [«SESSION_FILE_DIR»] = mkdtemp ()» из приложения заставляет его работать, но я не знаю, в чем проблема. Я знаю только, что в мобильных браузерах оператор «session.get («user_id»)» возвращает None.

3. вопрос может быть связан с конфиденциальностью на вашем мобильном телефоне, поскольку не позволяет mkdtemp()