7

以下に示すように、flask-login を使用した簡単なセットアップがあります。before_request をヒットすると、g.user が正しく設定されます。また、ユーザーを正しく登録しています(正しいメール/パスでデータベースにアクセスするように)。私の問題は、before_request とページ ヒットの間で、g.user が常に None になることです。セッションで何かが足りないと思いますが、何がわかりません。

初期化:

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)
4

1 に答える 1

3

try_login関数はremember_me3 番目のパラメーターとして受け取りますが、スニペットでは、呼び出し時に設定しないtry_loginでくださいtry_register。多分これはあなたの問題です。remember_meブール値である必要があることに注意してください。

またremember_metry_register電話をかける必要があります。

最後に、ログイン関数で regsiter 関数を呼び出し、レジスタで try_login を呼び出すのは奇妙です。パターンは少し乱雑です:)

于 2013-10-24T10:00:59.770 に答える