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

时间:2020-11-12 12:16:26

标签: python flask flask-login remember-me

我现在正在学习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 -

1 个答案:

答案 0 :(得分:0)

试试这个::

@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

我希望这能奏效:)

相关问题