Flask只允许内部访问页面

时间:2015-06-30 07:00:57

标签: python nginx flask restful-authentication

我正在使用RESTful API构建Flask,目前有两个页面(login页面和index页面。)

只有在用户登录后才能访问index页面。

目前我有:

@app.route('/venue/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        venue_owner_email = request.form['username']
        venue_owner_password = request.form['password']

        with contextlib.closing(DBSession()) as session:
            try:
                venue = session.query(Venue).filter_by(venue_owner_email=venue_owner_email).first()
                if not venue or not pwd_context.verify(venue_owner_password, venue.venue_owner_password):
                    error = 'Invalid Credentials. Please try again.'
                else:
                    return redirect(url_for('index'))                                                                                   
            except exc.SQLAlchemyError, error:
                session.rollback()
                raise_database_error(error)

    return render_template('login.html', error=error)


@app.route('/', methods = ['GET'])
def index():
    return render_template('index.html')

目前index.html可通过/访问/venue/login,但我只希望通过@auth.login_required访问,而不是直接通过浏览器访问。

如果我使用装饰器redirect,当user发生时,HTTP Authorisation Header必须重新输入其凭据。有没有办法在redirecting时发送redirect

我还想过而不是使用render_template,我可能只是使用total = 25 fragment = 10 for start in xrange(0, total, fragment): print "start = ", start for i in range(start, min([start + fragment, total])): print i ,但我不知道这是否是正确的做法。

如何正确地解决这个问题的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以向检查引荐网址的index.html添加装饰器。如果引用网址为/venue/login,您应该为该网页提供服务,否则会返回错误。

if request.referrer == <venue login url>: # continue else: # return error message