Flask如何优雅地重定向所有未登录用户到登陆界面?

请问如何优雅地将所有没有登陆的用户重定向到登陆界面呢?
我现在的做法是这样的:

if 'logged_in' not in session:
    return redirect(url_for('login.user_login'))

这样的话,我需要在所有的路由中都添加这个判断,请问正确的姿势是什么样的呢?

谢谢!

阅读 4.9k
评论
    3 个回答
    • 4.2k

    hook到app的before_request方法即可

    @app.before_request
    def check_need_login():
        # 检查登录的逻辑
        pass

      安装Flask-Login

      from flask.ext.login import login_required
      
      @app.route('/secret')
      @login_required
      def secret():
          return '只有认证用户可以访问'
        • 2
        • 新人请关照

        可以尝试定义一个装饰器

        def login_required(func):
        
            @wraps(func)
            def wrapper(*args, **kwargs):
                email = flask.session.get(constants.USER_SESSION_ID)
                user = User.query.filter_by(email=email).first()
                if email and user:
                    return func(*args, **kwargs)
                else:
                    return flask.redirect(flask.url_for('login'))
        
            return wrapper
        

        定义一个装饰器函数,然后通过将@login_required的方法使用:

        @app.route('/list/')
        @login_required
        def article_list():
            ……
            

        这样即使到了这个函数,也会跳转到登录页面

        该答案已被忽略,原因:

          撰写回答

          登录后参与交流、获取后续更新提醒