Почему Flask-Login current_user.is_authenticated не согласован?Python

Программы на Python
Ответить
Anonymous
 Почему Flask-Login current_user.is_authenticated не согласован?

Сообщение Anonymous »

У меня есть приложение Angular, которое выполняет вызовы API серверного приложения Flask. Приложение Flask использует Flask-Login для аутентификации пользователей при входе в систему. Когда пользователь входит в систему с помощью определенной мной функции login(), current_user.is_authenticated возвращает True. Когда я вызываю другую функцию с именем get_is_logged_in(), current_user.is_authenticated возвращает False.

Класс My User наследуется от UserMixin, поэтому он имеет все необходимые свойства и методы, как описано в документации (https://flask-login.readthedocs.io/en/l ... user-class). В функции login() после вызова login_user() я проверил current_user.id, чтобы убедиться, что в систему входит правильный пользователь. Я также проверил current_user.is_anonymous, и он вернул False, как и ожидалось.

user.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
database.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()
main.py

Код: Выделить всё

from flask import Flask, jsonify, request
from flask_login import LoginManager, login_user, login_required,
logout_user, current_user
from .entities.database import Session, engine, Base
from .entities.user import User

import json
# Other necessary imports

@login_manager.user_loader
def load_user(user_id):
return Session().query(User).filter_by(id=user_id).first()

@app.route('/api/login', methods=['POST'])
def login():
try:
posted_email = request.json['email'].lower()
posted_password = request.json['password']
user_json = get_user_by_email(posted_email)

if not bcrypt.check_password_hash(user_json.get_json() ['password'], posted_password): # The password was incorrect
return jsonify(success=False, message='The password is incorrect')
else: # The login was successful, so pass in all user credentials (except password)
# Get user object from the database
user = load_user(1) # Hard-coded id for testing

# Login the user
login_user(user, remember=False, force=True)

return jsonify(
success=True,
user=current_user.is_authenticated # Returns True
)
except KeyError: # A KeyError is only thrown if the user does not exist
return jsonify(success=False, message='A user with that email does not exist')

@app.route('/api/isLoggedIn', methods=['POST'])
def get_is_logged_in():
return jsonify(success=current_user.is_authenticated) # Returns False when called
Обратите внимание, что я использую декларативную базу из SQLAlchemy. Любая помощь приветствуется.

Подробнее здесь: https://stackoverflow.com/questions/544 ... consistent
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»