我有一个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的声明性库。任何帮助表示赞赏。
答案 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
是否正在加载每个请求(即添加打印语句)很有帮助。