Я использую потрясающую REST-framework Eve для создания CRUD API с аутентификацией JWT. Я просмотрел руководства, размещенные здесь, но получаю сообщение об ошибке 401, когда выполнение запроса POST к моим конечным точкам, для которых требуется аутентификация токена.
Я прочитал этот вопрос SO: Проблема с функцией Python Eve TokenAuth но я уверен, что токен закодирован в Base64.
Это ответ, который я получаю от сервера при выполнении запроса cURL GET:
curl -H "Authorization: <MYTOKEN>" -i http://MY_IP/users/548f6ecd64e6d12236c9576b
---- Response ----
HTTP/1.1 401 UNAUTHORIZED
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 16 Dec 2014 10:49:25 GMT
Content-Type: application/json
Content-Length: 91
Connection: keep-alive
WWW-Authenticate: Basic realm:"eve"
{"_status": "ERR", "_error": {"message": "Please provide proper credentials", "code": 401}}
Ниже мой код:
app.py
from eve import Eve
from eve.auth import TokenAuth
import jwt
class RolesAuth(TokenAuth):
def check_auth(self, token, allowed_roles, resource, method):
users = app.data.driver.db['users']
# Add check of user credentials by decoding JWT
user = users.find_one({'token': token})
return user
def add_token(documents):
for document in documents:
payload = {'username': document['username']}
document["token"] = jwt.encode(payload, 'secret')
if __name__ == '__main__':
app = Eve(auth=RolesAuth)
app.on_insert_users += add_token
app.run()
settings.py
users_schema = {
'username': {
'type': 'string',
'required': True,
},
'password': {
'type': 'string',
'required': True,
},
'email': {
'type': 'string',
'minlength': 1,
'maxlength': 200,
'required': True,
},
'token': {
'type': 'string',
},
'created': {
'type': 'datetime',
}
}
users = {
'cache_control': '',
'cache_expires': 0,
'extra_response_fields': ['token'],
'public_methods': ['POST'],
'schema': users_schema
}
DOMAIN = {
'users': users,
}
У меня есть токен, хранящийся в моей MongoDB для пользователя, и я делаю запрос с помощью Postman, и я m включая токен в заголовке авторизации следующим образом:
Authorization: <USERTOKEN>
Любые мысли о том, почему это дает мне 401.
Спасибо!