Flask登录为什么current_user.is_authenticated不一致?

时间:2019-01-29 23:53:04

标签: python flask flask-sqlalchemy flask-login

我有一个Angular应用,正在对后端Flask应用进行API调用。当用户登录时,Flask应用程序正在使用Flask-Login进行身份验证。当用户使用我定义的login()函数登录时,current_user.is_authenticated返回True。当我调用另一个称为get_is_logged_in()的函数时,current_user.is_authenticated返回False

我的User类继承自UserMixin,因此它具有所有必需的属性和方法,如文档(https://flask-login.readthedocs.io/en/latest/#your-user-class)中所述。在login()函数中,调用login_user()后,我检查了current_user.id以验证是否登录了正确的用户。我还检查了current_user.is_anonymous并返回了{{1} }。

user.py

False

database.py

from sqlalchemy import Column, String, Text, Integer
from flask_login import UserMixin
from .database import Base, Session

class User(Base, UserMixin): # Inherits UserMixin
    __tablename__ = "USER"

    id = Column(Integer, primary_key=True)
    email = Column(String(450), unique=True, nullable=False)
    first_name = Column(String, nullable=False)
    last_name = Column(String, nullable=False)
    password = Column(Text, nullable=False)

    def __init__(self, email, first_name, last_name, password):
        self.email = email
        self.first_name = first_name
        self.last_name = last_name
        self.password = password

main.py

from sqlalchemy import create_engine, Column, String, Integer, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import pymssql

db_url = "DB_URL"
db_name = "DB_NAME"
db_user = "DB_USER"
db_password = "DB_PW"
engine = create_engine(f'mssql+pymssql://{db_user}:{db_password}@{db_url}/{db_name}')
Session = sessionmaker(bind=engine)
Base = declarative_base()

请注意,我正在使用SQLAlchemy的声明性库。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

return jsonify(
        success=True,
        user=current_user.is_authenticated # Returns True
        )

这将始终返回true,因为无论success = True的值是什么,您都明确设置了current_user.is_authenticated

我看不到您在任何地方调用get_is_logged_in,但是返回false的最明显原因是因为在调用函数时current_user.is_authenticated实际上不等于True ,因此您将success设置为false。

确定调用get_is_logged_in的代码段将很有帮助。

答案 1 :(得分:0)

在请求之间current_user可能不会持久存在,尤其是在调用/api/login/api/isLoggedIn的方法不同的情况下。

load_user()函数将针对每个请求运行,因此您可能会发现检查user_i是否正在加载每个请求(即添加打印语句)很有帮助。