微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flask-login可以登录,但不记得登录会话

如何解决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.usernamesession['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 举报,一经查实,本站将立刻删除。