如何解决烧瓶登录 current_user.is_authenticated 始终为 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 %}
还有我的 models.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),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}')"
请帮我解决这个问题,我已经尝试了一切,但由于某种原因似乎没有任何效果,我什至直接复制了 Corey 的代码
链接到 youtube 教程: https://www.youtube.com/watch?v=CSHx6eCkmv0&list=PL-osiE80TeTs4UjLw5MM6OjgkjFeUxCYH&index=6
解决方法
您在返回用户时忘记传递 user_id
。
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
在他的视频中,检查时间戳 23:52
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。