繁体   English   中英

Flask 只允许内部访问页面

[英]Flask to only allow access to page internally

我正在使用Flask构建一个RESTful API ,目前有两个页面(一个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必须重新输入他们的凭据。 有没有办法在redirecting时发送HTTP Authorisation Header

我还想,而不是使用redirect ,我可能只使用render_template但我不知道这是否是正确的方法。

任何有关如何正确解决此问题的帮助将不胜感激。

您可以向index.html添加一个装饰器来检查引用 url。 如果引用 url 是/venue/login您应该提供该页面,否则会返回错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM