这个是资源保护器修饰器的类,我觉得写得真的好:
class ResourceProtector(_ResourceProtector):
def acquire_token(self, scope=None):
request = TokenRequest(
_req.method,
_req.full_path,
_req.data,
_req.headers
)
token = self.validate_request(scope, request)
token_authenticated.send(self, token=token)
ctx = _app_ctx_stack.top
ctx.authlib_server_oauth2_token = token
return token
@contextmanager
def acquire(self, scope=None):
try:
yield self.acquire_token(scope)
except OAuth2Error as error:
raise_oauth2_error(error)
def __call__(self, scope=None):
def wrapper(f):
@functools.wraps(f)
def decorated(*args, **kwargs):
try:
self.acquire_token(scope)
except OAuth2Error as error:
raise_oauth2_error(error)
return f(*args, **kwargs)
return decorated
return wrapper