我正在使用django-rest-framework
定义供Python客户端使用的REST API。客户端使用coreapi
访问API。我使用中间件记录了对服务器应用程序的所有访问。
我希望客户端通过用户名和密码进行身份验证。然后,我使用这些凭据从auth-token
端点接收相应用户的令牌,并将此令牌用于coreapi.auth.TokenAuthentication
。然后,我希望coreapi以提供了凭据和令牌的用户的名义发送请求,但是用coreapi发出的请求不包括用户。
我尝试使用coreapi.auth.BasicAuthentication
和coreapi.auth.TokenAuthentication
。在这两种情况下,我都可以进行身份验证并接收正确的API端点,但是在我的中间件中记录coreapi发出的请求时,没有设置用户。
client = coreapi.Client()
schema = client.get(schema_url)
这时我收到了模式:
token-auth: {
create(username, password)
}
然后我使用token-auth
端点为我的用户获取令牌。
response = client.action(schema, ['token-auth', 'create'], params={'username': username, 'password': password})
auth = coreapi.auth.TokenAuthentication(scheme='Token', token=response['token'])
client = coreapi.Client(auth=auth)
schema = self.client.get(schema_url)
该架构现在看起来很完整。
token-auth: {
create(username, password)
}
users: {
list([page])
recent_users()
read(id)
}
# ...
我的中间件为每个收到的请求创建Log对象,并像这样追加用户:
if request.user.is_authenticated:
logs_data['user'] = request.user
中间件成功记录了我的Python coreapi客户端发出的所有请求,并相应地设置了字段。例如,请求元数据中包含'HTTP_USER_AGENT': 'coreapi'
。我希望将request.user
设置为用于较早进行身份验证的用户,但是我收到的只是AnonymousUsers。
有没有办法使用包括用户在内的coreapi发送经过身份验证的请求?