[英]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.