#reactjs #flask #session #session-cookies
Вопрос:
Я действительно изо всех сил пытаюсь заставить сеанс работать должным образом для моего приложения React/Flask/Postgres. В приведенном ниже фрагменте кода идентификатор пользователя хранится в сеансе в маршруте входа в систему. Он хранится правильно и распечатывает идентификатор пользователя сеанса в следующей инструкции печати. Это не сохраняется между вызовами или даже функциями
Когда loadUser() вызывается при входе в систему, он не может найти идентификатор пользователя, сохраненный в сеансе.
app = Flask(__name__)
SESSION_TYPE = "filesystem"
SECRET_KEY = os.getenv("SECRET_KEY")
app.config.from_object(__name__)
app.config['ENV'] = "development"
app.config['SESSION_COOKIE_SECURE'] = True
app.config['SESSION_COOKIE_SAMESITE'] = 'None'
Session(app)
# Set up some configurations for the app
cors = CORS(app, support_credentials=True, resources={
r"/*": {
"origins": "*"
}
})
con = psycopg2.connect(
dbname=DATABASE,
user=DATABASE_USER,
password=DATABASE_PASS,
host="146.69.161.48",
port="5432"
)
con.autocommit = True
cur = con.cursor()
@app.route("/api/login", methods=['POST'])
@cross_origin(supports_credentials=True)
def login():
data = request.get_json()
username = data['username']
password = data['password']
error = None
cur.execute(
sql.SQL(
"SELECT * FROM UserInfo WHERE username = (%s);"),
[username])
user = cur.fetchone()
if user is None:
error = 'Incorrect username.'
elif not check_password_hash(user[2], password):
error = 'Incorrect password.'
if error is None:
session['user_id'] = user[0]
loadUser()
response = make_response(jsonify("User: " str(session['user_id']) " logged in."))
response.headers.add('Access-Control-Allow-Headers',
"Origin, X-Requested-With, Content-Type, Accept, x-auth")
return response
При запросе самого сеанса от React после входа в систему сеанс возвращает только объект с «_permanent» = true. Это, по крайней мере, показывает, что он успешно возвращает объект сеанса.
@app.route("/api/getSession", methods=['GET'])
@cross_origin(supports_credentials=True)
def getSession():
response = make_response(jsonify(session))
response.headers.add('Access-Control-Allow-Headers',
"Origin, X-Requested-With, Content-Type, Accept, x-auth")
return response
Я могу видеть сохраненные файлы cookie сеанса в Postman, но не могу видеть файлы, сохраненные в Chrome/Firefox.
Запрос на реагирование:
const handleSubmit = event => {
event.preventDefault();
console.log(email);
console.log(password);
let data = {"username": email, "password": password}
axios
.post("http://146.69.161.48:5000/api/login", data, {withCredentials: true})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.error("There was an error logging in", error);
});
};
const getSession = event => {
axios
.get("http://146.69.161.48:5000/api/getSession", {withCredentials: true})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.error("There was an error. ", error);
});
};