def METHOD_NAME(token: str,
                        update_access_time: bool = True
                        ) -> Optional[model.User]:
    data = decode(token)
    if not data:
        return None
    # do preprocessing in reverse order, allowing onion-like "unwrapping" of
    # the data, added during postprocessing, when token was
    # created. `Interface._reverse_iteration_order` cannot be used here,
    # because all other methods of IApiToken should be executed in a normal
    # order and only `IApiToken.preprocess_api_token` must be different.
    for plugin in reversed(list(_get_plugins())):
        data = plugin.preprocess_api_token(data)
    if not data or u"jti" not in data:
        return None
    token_obj = model.ApiToken.get(data[u"jti"])
    if not token_obj:
        return None
    if update_access_time:
        token_obj.touch(True)
    return token_obj.owner