сеанс фляги не работает, если я использую mkdtemp () для SESSION_FILE_DIR - PullRequest
0 голосов
/ 30 января 2019

У меня есть приложение фляги, в котором я пытаюсь создать сеанс, но только для административных маршрутов, так что где-нибудь еще может быть доступен, кроме административных маршрутов, дело в том, что на моем локальном хосте все работает нормально, но в прямом эфиресервер, сеанс создается при входе в систему, но когда я пытаюсь проверить, существует ли сеанс, вызывая session.get ("user_id"), это не так.Это как если сеанс не создан постоянным.Сегодня я читаю в течение 10 часов и, наконец, выяснил, почему это не работает, но я действительно не понимаю, почему это происходит.Проблема, с которой я сталкиваюсь, находится в app.config ["SESSION_FILE_DIR"] = mkdtemp (), если я использую это в работах localhost, но не на живом сервере, и если я пропущу эту строку, то она будет работать вживой сервер.Вот мой код:

from flask import Flask, flash, redirect, render_template, request, session, jsonify, url_for
from flask_session import Session
from functools import wraps
from werkzeug.security import check_password_hash, generate_password_hash
from tempfile import mkdtemp # used to create a temp directory
from helpers import login_required
import os

# Configure application as flask app
app = Flask(__name__)

# Ensure templates are auto-reloaded
app.config["TEMPLATES_AUTO_RELOAD"] = True

# Configure session to use filesystem (instead of signed cookies)
app.config["SESSION_FILE_DIR"] = mkdtemp()
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
app.secret_key = 'superkey'

# function to login admin
@app.route("/login", methods=["GET", "POST"])
def login():
"""Log admin in"""

# Forget any user_id
session.clear()

# User reached route via POST (as by submitting a form via POST)
if request.method == "POST":

    # Ensure username was submitted
    if not request.form.get("username"):
        flash ("must provide username")
        return render_template('/login.html')

    # Ensure password was submitted
    elif not request.form.get("password"):
        flash ("must provide password")
        return render_template('/login.html')

    # Query database for username
    username = request.form.get("username")
    username = str.lower(username)
    db = dbConnection()
    db.execute("SELECT * FROM identities WHERE user_name = ?", [username])
    rows = db.fetchall()

    # Ensure username exists and password is correct
    if len(rows) == 1:
        uid, name, pass_hash = rows[0]
    if len(rows) != 1 or not check_password_hash(pass_hash, request.form.get("password")):
        flash ("invalid username and/or password")
        return render_template('/login.html')

    # Remember which user has logged in
    session["user_id"] = uid

    # Redirect user to home page
    return redirect("/adminForms")

# User reached route via GET (as by clicking a link or via redirect)
else:
    return render_template("login.html")

# function as decorator to ensure the user was logged in before 
# can go to a protected page
def login_required(f):

    @wraps(f)
    def decorated_function(*args, **kwargs):
        # if session don't return a value, then the user needs to log in
        if session.get("user_id") is None:
            return redirect("/login")
        return f(*args, **kwargs)
    return decorated_function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...