flask-login current_user.is_authenticated always is False



我一直在遵循Corey Schafer的youtube教程并练习如何创建烧瓶网页,但我一直在尝试创建注销按钮,我已经尝试了很多次,发现问题出在current_user.is_authenticated

以下是我的routes.py登录和注销代码(包括导入(:

from flask import render_template, url_for, flash, redirect, request
from flaskblog import app, db, bcrypt
from flaskblog.forms import RegistrationForm, LoginForm
from flaskblog.models import User, Post
from flask_login import login_user, current_user, logout_user, login_required

@app.route("/login", methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('home'))
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if user and bcrypt.check_password_hash(user.password, form.password.data):
login_user(user, remember=form.remember.data)
next_page = request.args.get('next')
return redirect(next_page) if next_page else redirect(url_for('home'))
else:
flash('Login Unsuccessful. Please check email and password', 'danger')
return render_template('login.html', title='Login', form=form)

@app.route("/logout")
def logout():
logout_user()
return redirect(url_for('home'))

这也是layout.html代码:

<div class="navbar-nav">
{% if current_user.is_authenticated %}
<a class="nav-item nav-link" href="{{ url_for('logout') }}">Logout</a>
{% else %}
<a class="nav-item nav-link" href="{{ url_for('login') }}">Login</a>
<a class="nav-item nav-link" href="{{ url_for('register') }}">Register</a>
{% endif %}

还有我的型号.py用户代码:

from datetime import datetime
from flaskblog import db, login_manager
from flask_login import UserMixin

@login_manager.user_loader
def load_user(user_id):
return User.query.get(int())
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
image_file = db.Column(db.String(20), nullable=False, default='default.jpeg')
password = db.Column(db.String(60),nullable=False)
posts = db.relationship('Post', backref ='author', lazy=True)
def __repr__(self):
return f"User('{self.username}', '{self.email}','{self.image_file}')"

请帮我解决这个问题,我已经尝试了所有的方法,但由于某种原因似乎都不起作用,我甚至直接复制了科里的代码

youtube教程链接:https://www.youtube.com/watch?v=CSHx6eCkmv0&list=PL-osiE80TeTs4UjLw5MM6OjgkjFeUxCYH&索引=6

返回用户时忘记传递user_id

@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))

在他的视频中,检查时间戳23:52

根据烧瓶登录文档在用户模型类中,必须添加一些方法作为属性。如:

def get_id(self):
return self.id
@property
def is_active(self):
return True
@property
def is_authenticated(self):
return True
@property
def is_anonymous(self):
return False

请注意,get_id方法没有decorator属性

并且load_user函数在它所在的位置是不必要的。它应该在主应用程序的范围内,因为这是用户需要加载的地方。模型中没有。

最新更新