簡體   English   中英

flask g.user和before_request

[英]flask g.user and before_request

我有一個簡單的設置,使用如下所示的flask-login。 當我點擊before_request時,g.user設置正確。 我也正確注冊用戶(因為他們使用正確的電子郵件/通行證打到數據庫)。 我的問題是在before_request和頁面命中之間,g.user總是變為None。 我想我會錯過會話,但我不知道是什么。

init

lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'

在view / login.py文件中,我有以下內容。

意見/ login.py:

@app.lm.user_loader
def load_user(id):
    return models.user.user_with_id(id)

@app.before_request
def before_request():
    g.user = current_user
    print 'current_user: %s, g.user: %s, leaving bef_req' % (current_user, g.user)

@app.route('/login', methods=['GET', 'POST'])
def login():
    print 'in login, g.user: %s' % g.user
    if g.user is not None and g.user.is_authenticated():
        return redirect(url_for('index'))
    enter_form = app.forms.EnterForm()
    if enter_form.validate_on_submit():
        session['remember_me'] = True
        return app.models.user.try_register(enter_form.email.data,
                                            enter_form.password.data)
    return render_template('index.html', enter_form=enter_form, profiles=[])

意見/ index.py:

@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
    print 'in index, g.user: %s' % g.user
    if not g.user:
        return redirect(url_for('login'))
    return render_template('index.html')

車型/ user.py:

def try_login(email, password, remember_me):
    u = user_with_email(email)
    if u and authenticate(u, password):
        login_user(u, remember=remember_me)
    return app.views.index.go_to_index()

def try_register(email, password, role=ROLE_USER):
    if not user_with_email(email):
        add_user(password, role=role, email=email)
    return try_login(email, password)

您的try_login函數將remember_me作為第三個參數,但在提供的代碼段中,您在try_register調用try_login時不會設置它。 也許這是你的問題。 請注意, remember_me應該是一個布爾值。

你還應該將remember_me放在try_register調用中。

最后在登錄函數中調用regsiter函數並在寄存器中調用try_login是很奇怪的。 模式有點凌亂:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM