如何解决当重定向到不同页面时,Flask 登录为所有属性返回 False
我在使用 Flask Login 时遇到问题,因为每次我导航到不同的页面时,flask login 似乎都没有跟踪会话。例如,在我登录的“/login”路径中,current_user_is_authenticated 返回 true 及其 id。但是,当我导航到“/reminders”路径以添加与用户关联的提醒时,我得到 current_user_is_authenticated False。我还尝试测试以查看 current_user_is_anonymous/is_active 是否仍然得到 False。如果我在“/reminders”和“/logout”路由中为 current_user_is 匿名、current_user_is_authenticated 和 current_user_is_active 设置为 false,我不知道问题是什么。
routes.py
from database.models import User,Reminder
from database import app,request,bcrypt,db
import json
from flask_login import login_user,logout_user,current_user,login_required
import sys
@app.route("/register",methods= ['POST','GET'])
def registerForm():
if request.method == 'POST':
name = request.form["personName"]
number = request.form["phoneNumber"]
email = request.form["personEmail"]
password = request.form["password"]
confirmPassword = request.form["confirmPassword"]
duplicateEmail = User.query.filter_by(email=email).first()
if password != confirmPassword:
return json.dumps({"passwordError": "Passwords Do Not Match! "})
if duplicateEmail is not None:
return json.dumps({"duplicateEmailError": "E-mail Already Exists! Please sign in."})
pw_hash = bcrypt.generate_password_hash(password).decode('utf-8')
user = User(name = name,email = email,password = pw_hash,number = number)
db.create_all()
db.session.add(user)
db.session.commit()
return json.dumps(
{"sucessMessage": "ok","redirectToLogInPage": "/"
}
)
@app.route("/login",methods = ['POST','GET'])
def logInForm():
if request.method == 'POST':
email = request.form['personEmail']
password = request.form['password']
getPerson = User.query.filter_by(email=email).first()
if getPerson != None:
hash_pass = getPerson.password
if getPerson and bcrypt.check_password_hash(hash_pass,password):
login_user(getPerson,remember=True)
print(f'Login {current_user.is_authenticated} and id is {current_user.get_id()}',flush=True)
return json.dumps({"sucessMessage":"ok","redirectToPriority": "/priority"})
return json.dumps({"errorMessage":"E-mail Does Not Exist or Password Is Incorrect"})
@app.route("/logout",'GET'])
def logout():
print(f'Logout {current_user.is_anonymous} and id is {current_user.get_id()}',flush=True)
logout_user()
return json.dumps({"logOut": True})
@app.route("/reminders",methods =['POST','GET'])
def createReminders():
if request.method == 'POST':
form = json.loads(request.data.decode('UTF-8'))
text = form['reminderText']
date = form['reminderDate']
time = form['reminderTime']
enableMobileNotification = True if form['enableMobileNotification'] is True else False
enableDesktopNotification = True if form['enableDesktopNotification'] is True else False
print(f'Add reminders {current_user.is_authenticated} and id is {current_user.get_id()} ',flush =True)
return "ok"
models.py
from datetime import datetime
from database import db,login_manager
from flask_login import UserMixin
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
class User(db.Model,UserMixin):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(20),nullable=False)
email = db.Column(db.String(120),unique=True,nullable=False)
password = db.Column(db.String(20),nullable=False)
number = db.Column(db.String(13),nullable=False)
reminders = db.relationship('Reminder',backref="person",lazy=True)
class Reminder(db.Model):
id = db.Column(db.Integer,primary_key=True)
text = db.Column(db.String(100),nullable=False)
date = db.Column(db.DateTime,default=datetime.utcnow,nullable = False)
time = db.Column(db.DateTime,nullable = False)
notifyMobile = db.Column(db.Boolean)
notifyDesktop = db.Column(db.Boolean)
person_id = db.Column(db.Integer,db.ForeignKey('user.id'))
init.py
from flask import Flask,request
from flask_cors import CORS
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
app = Flask(__name__)
bcrypt = Bcrypt(app)
CORS(app)
app.config['SECRET_KEY'] = 'xf2Y!B"xd0x9ex98v|xab0x1b\x94\xbf%\xf7\x9d\xf9;\xe2\xfd9R'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
login_manager = LoginManager(app)
from database import routes
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。