Login 示例

一旦用户通过验证,你可以使用 login_user 函数让用户登录。例如:

  1. @app.route('/login', methods=['GET', 'POST'])
  2. def login():
  3. # Here we use a class of some kind to represent and validate our
  4. # client-side form data. For example, WTForms is a library that will
  5. # handle this for us, and we use a custom LoginForm to validate.
  6. form = LoginForm()
  7. if form.validate_on_submit():
  8. # Login and validate the user.
  9. # user should be an instance of your `User` class
  10. login_user(user)
  11. flask.flash('Logged in successfully.')
  12. next = flask.request.args.get('next')
  13. # next_is_valid should check if the user has valid
  14. # permission to access the `next` url
  15. if not next_is_valid(next):
  16. return flask.abort(400)
  17. return flask.redirect(next or flask.url_for('index'))
  18. return flask.render_template('login.html', form=form)

警告: 你必须验证 next 参数的值。如果不验证的话,你的应用将会受到重定向的攻击。

就这么简单。你可用使用 current_user 代理来访问登录的用户,在每一个模板中都可以使用 current_user:

  1. {% if current_user.is_authenticated() %}
  2. Hi {{ current_user.name }}!
  3. {% endif %}

需要用户登入 的视图可以用 login_required 装饰器来装饰:

  1. @app.route("/settings")
  2. @login_required
  3. def settings():
  4. pass

当用户要登出时:

  1. @app.route("/logout")
  2. @login_required
  3. def logout():
  4. logout_user()
  5. return redirect(somewhere)

他们会被登出,且他们会话产生的任何 cookie 都会被清理干净。