[英]Response from before_request
在我的应用中,我试图检查用户是否被授权访问资源,例如,当用户请求url api / proxy时 。
我使用before_request调用检查功能
@hook('before_request')
def check_permission():
securityService = SecurityService(db=db)
try:
securityService.check_access_permission(request)
except Exception as e:
print("excepting")
return json.dumps({'Error': str(e)})
// stop execution here
访问检查的功能已经过测试,未授予访问权限时会引发异常。 即使在服务器日志中,我也可以看到“ exception”。 Return语句不会停止执行过程。
但是代码不会停止执行,而是继续执行proxy_get函数
@get('/api/proxy')
def proxy_get():
response = proxyService.get()
return json.dumps({"Response" : response})
有什么方法可以停止before_request函数中的请求处理,还是我只是搞砸了? 什么是正确的解决方案?
如何为该响应设置状态代码? 我试过了
response.status_code(401)
但是没有用。 我收到错误TypeError:“ int”对象不可调用
您可能应该为拒绝访问创建一个控制器,然后修改请求以重定向到该控制器。 因此,您的代码将如下所示:
@hook('before_request')
def check_permission():
securityService = SecurityService(db=db)
try:
securityService.check_access_permission(request)
except Exception as e:
request.environ['PATH_INFO'] = '/error_401'
@route('/error_401')
response.body = json.dumps({'Error': str(e)}
response.status = 401
return response
我实际上从未使用过Bottle,所以这可能不是最好的方法,但是它可以与简单的测试代码一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.