如何解决Flask-login可以登录,但不记得登录会话
我现在正在学习flask-login,并且遇到一些问题。我的route
未设置@login_required
时可以登录。当我设置@login_required
并尝试在登录后重定向时,它将要求我再次登录。因此,我不确定烧瓶会发生什么情况。
这是我的代码和我的代码结构。
浮动结构
Flask_Login
|
|----member
| |----setting
| | |----__init__.py
| | |----form.py
| | |----model.py
| | |----view.py
| |
| |----static
| |----templates
| |----__init__.py
| |----sendmail.py
|
|----manage.py
|----config.py
view.py
@app.route('/login',methods=['GET','POST'])
def login():
form = formLogin()
if form.validate_on_submit():
user = UserRegister.query.filter_by(email=form.email.data).first()
if user:
if user.check_password(form.password.data):
login_user(user,form.remember_me.data)
next = request.args.get('next')
if not next_is_valid(next):
return ':-<'
else:
session['username'] = user.username
session['login_in'] = True
return redirect(url_for('index'))
else:
flash('Wrong')
else:
flash('Wrong')
return render_template('login/login.html',form=form)
def next_is_valid(url):
return True
@app.route('/')
@login_required
def index():
return ':->'
我不确定是否需要在此处设置session['username'] = user.username
和session['login_in'] = True
以及是否正确设置,但是如果都没有设置,flask-login仍然无法正常工作。 / p>
__ init __。py
from flask import Flask
from flask_sqlalchemy import sqlAlchemy
from flask_bootstrap import Bootstrap
from config import Config
from flask_migrate import Migrate
from flask_bcrypt import Bcrypt
from flask_mail import Mail
from flask_login import LoginManager
from datetime import timedelta
app = Flask(__name__)
app.config.from_object(Config)
mail = Mail(app)
bootstrap = Bootstrap(app)
db = sqlAlchemy(app)
bcrypt = Bcrypt(app)
migrate = Migrate(app,db)
login_manager = LoginManager(app)
login_manager.init_app(app)
login_manager.login_view = 'login'
login_manager.login_message = 'Please logon'
login_manager.session_protection = "strong"
@login_manager.user_loader
def load_user(userID):
from member.setting.model import UserRegister
try:
return UserRegister.query.get(UserRegister.id==userID)
except:
return None
from .setting import view
终端
127.0.0.1 - - [12/Nov/2020 19:51:15] "GET / HTTP/1.1" 302 -
127.0.0.1 - - [12/Nov/2020 19:51:15] "GET /login?next=%2F HTTP/1.1" 200 -
127.0.0.1 - - [12/Nov/2020 19:51:24] "POST /login?next=%2F HTTP/1.1" 302 -
127.0.0.1 - - [12/Nov/2020 19:51:24] "GET / HTTP/1.1" 302 -
127.0.0.1 - - [12/Nov/2020 19:51:24] "GET /login?next=%2F HTTP/1.1" 200 -
解决方法
试试这个::
@app.route('/login',methods=['GET','POST'])
def login():
form = FormLogin()
if form.validate_on_submit():
user = UserRegister.query.filter_by(email=form.email.data).first()
if user:
if user.check_password(form.password.data):
login_user(user,form.remember_me.data)
next = request.args.get('next')
return redirect(next) if next else redirect(url_for('index'))
else:
flash('Wrong')
else:
flash('Wrong')
return render_template('login/login.html',form=form)
还要从init.py中删除login_manager.session_protection = "strong"
编辑::
进行更改:删除UserRegister.id==
@login_manager.user_loader
def load_user(userID):
from member.setting.model import UserRegister
try:
return UserRegister.query.get(userID)
except:
return None
我希望这能奏效:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。