重定向到登录页面,而不是在未登录时显示禁止消息



我有一个authenticated_resource装饰器,防止访问某些路由,如果用户没有登录。我想重定向到登录页面,如果用户没有登录,但现在它显示了一个"禁止"的消息,而不是。我如何重定向?

禁止

您没有访问所请求资源的权限。它要么是受读保护的,要么是服务器不可读的。

@app.route('/metering')
@authenticated_resource
def getstats():
    token = session.get('auth_token')
    print 'token in metering =', token
    return render_template('metering.html', title='Resource Usage') 
@app.route('/logout')
def logout():
    session.pop('auth_token', None)
    session.pop('authenticated', None)
    return redirect(url_for('login'))
def authenticated_resource(function):
    @wraps(function)
    def decorated(*args, **kwargs):
        if session.get('authenticated'):
            return function(*args, **kwargs)
        return abort(403) # unauthenticated
    return decorated
@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != '1234':
            error = 'Invalid Credentials. Please try again.'
        else:
            username = request.form['username']
            password = request.form['password']      
            token = auth.get_token(username, password)
            session['authenticated'] = True
            session['auth_token'] = token     
            return redirect(url_for('getstats'))
    return render_template('login.html', error=error)

与其放弃403错误,不如更改您的authenticated_resource以返回重定向到登录页面。

def authenticated_resource(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        if 'auth_token' in session:
            return f(*args, **kwargs)
        return redirect(url_for('login'))
    return decorated

你应该强烈考虑使用Flask-Login来为你管理用户会话、重定向等。

最新更新