简体   繁体   English

AttributeError: 'list' object 没有属性 'is_active'

[英]AttributeError: 'list' object has no attribute 'is_active'

I am building a website using Flask and when I try to log in and signup I get this error AttributeError: 'list' object has no attribute 'is_active'我正在使用 Flask 构建网站,当我尝试登录和注册时,我收到此错误AttributeError: 'list' object has no attribute 'is_active'

an error like this appears when I have used login_user in the flask_login library当我在flask_login库中使用login_user时出现这样的错误

here I use firestore database在这里我使用firestore数据库

I have tried various solutions on StackOverflow but none of them worked, I'm very confused now this is my code我在 StackOverflow 上尝试了各种解决方案,但都没有奏效,现在我很困惑这是我的代码

__ini__.py

from flask import Flask
from flask_login import UserMixin
from flask_login import LoginManager
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'adjadlkahd'
    
    db = connect_database()

    from .views import views
    from .auth import auth
    from .models import User
    #check user login
    login_manager = LoginManager()
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)
    #create user model
    @login_manager.user_loader
    def load_user(id):
        return User.get_user_id(id)
    #register blueprints
    app.register_blueprint(views, url_prefix='/')
    app.register_blueprint(auth, url_prefix='/')
    
 
    return app

cred = credentials.Certificate("websites\serviceAccountKey.json")
firebase_admin.initialize_app(cred)

def connect_database():
    db = firestore.client()
    return db

auth.py

from flask import Blueprint, render_template, request, redirect, url_for
from .models import User
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import login_user, login_required, logout_user, current_user

auth = Blueprint('auth', __name__)

@auth.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        email = request.form.get('email')
        password = request.form.get('password')

        user = User.log_in(email)
        if user:
            if check_password_hash(user[0].to_dict()['password'], password):
                login_user(user, remember=True)
                redirect(url_for('views.home'))
            else:
                return "<h1>paass salah</h1>"
        else:
            return "<h1>user tidak ada</h1>"
 
    return render_template('login.html')

@auth.route('/logout')     
@login_required 
def logout():
    logout_user()
    return redirect(url_for('auth.login'))

@auth.route('/signup', methods=['GET', 'POST'])
def signup():
    if request.method == 'POST':
        username = request.form.get('username')
        email    = request.form.get('email')
        password = request.form.get('password')

        if User.check_user(email):
            return "<h1>email already exist</h1>"

        new_user = User(username=username, email=email,
                        password=generate_password_hash(password)).create_user()

        login_user(new_user, remember=True)

        return redirect(url_for('views.home'))

    return render_template('signup.html')

models.py

from flask_login import UserMixin
from . import connect_database
import uuid

db = connect_database()
class User(UserMixin):
    def __init__(self, username, email, password):
        self.username = username
        self.email = email
        self.password = password

    def create_user(self):
        db.collection('user').document(self.username).set({
            'id' : str(uuid.uuid4()),
            'username': self.username,
            'email': self.email,
            'password': self.password
        })

    def log_in(email):
        user = db.collection('user').where('email', '==', email).get()
        return user
    def check_user(email):
        user = db.collection('user').where('email', '==', email).get()
        return bool(user)
    
    def get_user_id(id):
        return db.collection('user').document(id).get()

views.py

from flask import Blueprint
from flask_login import login_required, current_user
views = Blueprint('views', __name__)

@views.route('/')
@login_required
def home():
    return "<h1>logged in</h1>"

For flask login to work you need to have a user class that implements some properties and methods.要让 flask 登录工作,您需要有一个实现一些属性和方法的用户 class。 When you use login_user method the argument should be an instance of that user class.当您使用 login_user 方法时,参数应该是该用户 class 的实例。

make user that your method def log_in(email) returns a user object not a list.让用户知道您的方法 def log_in(email) 返回用户 object 而不是列表。

def log_in(email):
    user = db.collection('user').where('email', '==', email).get()
    return user  # <-- most probably is a list.
  1. Read the items form the user collection从用户集合中读取项目
  2. Create an instance of the user class创建用户 class 的实例
  3. fill the properties of the user class from the collection从集合中填充用户 class 的属性
  4. return the instance返回实例

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AttributeError:&#39;SelectQuery&#39;对象没有属性&#39;is_active&#39; - AttributeError: 'SelectQuery' object has no attribute 'is_active' Flask-login AttributeError: &#39;User&#39; 对象没有属性 &#39;is_active&#39; - Flask-login AttributeError: 'User' object has no attribute 'is_active' AttributeError:&#39;dict&#39;对象没有属性&#39;is_active&#39;(PyMongo和Flask) - AttributeError: 'dict' object has no attribute 'is_active' (PyMongo And Flask) AttributeError:“用户”对象没有属性“ is_active”烧瓶应用程序 - AttributeError: 'User' object has no attribute 'is_active' flask application Python Flask:AttributeError:&#39;NoneType&#39;对象没有属性&#39;is_active&#39; - Python Flask: AttributeError: 'NoneType' object has no attribute 'is_active' Flask:&#39;str&#39; 对象没有属性 &#39;is_active&#39; - Flask: 'str' object has no attribute 'is_active' / login /&#39;NoneType&#39;对象处的Django1.11 AttributeError没有属性&#39;is_active&#39; - Django1.11 AttributeError at /login/ 'NoneType' object has no attribute 'is_active' PYTHON-Flask:“用户”对象没有属性“ is_active” - PYTHON - Flask : 'User' object has no attribute 'is_active' AttributeError: 'list' object 没有属性 - AttributeError: 'list' object has no attribute Django:Select 从下拉列表中的 object 字段为 is_active=True - Django: Select from the dropdown the object that has the field is_active=True
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM