Аутентификация Python Eve Framework не применяется к выбранным API

Я пишу API в Python Eve, для реализации аутентификации я следовал документации, написанной на Python Eve Authentication

Мой код класса аутентификации выглядит следующим образом: -

__author__ = 'sappal'

from eve.auth import BasicAuth

class SampleAuth(BasicAuth):
  def check_auth(self, username, password, allowed_roles, resource, method):

    if method == 'GET' and resource == 'org':
      print "Inside GET Method for Org Resource"

    elif method == 'POST' and resource == 'org':
      print "Inside POST Method for Org Resource "

    elif method == 'GET' and resource == 'people':
      print "Inside GET Method for People Resource"

    elif method == 'POST' and resource == 'people':
      return True
    else:
      return username == 'admin' and password == 'secret'

Поскольку в коде указано, что я делаю вызов POST на конечной точке людей без аутентификации {и это то, что я собираюсь сделать}, но когда я делаю вызов POST на конечной точке людей [http://127.0.0.1:5000/люди] .

Я получаю следующий ответ

{"_status": "ERR", "_error"
     {
       "message": "Please provide proper credentials", 
       "code": 401
     }
}

Мой запрос Полезная нагрузка: -

[
  {
    'firstname': 'Tushar',
    'lastname': 'Sappal',
    'email': '[email protected]',
    'phonenumber': 123456789,
    'userid': '',
    'password': 'testtushar'
  }
]

Я генерирую идентификатор пользователя на лету, поэтому это не обязательное значение для передачи в полезной нагрузке запроса.

Пожалуйста, помогите и направьте меня, что я делаю неправильно.


person tushar_sappal    schedule 08.05.2015    source источник
comment
Ну, это действительно трудно сказать только по этому фрагменту. Какова ваша просьба? Вы пытались напечатать что-то и в POST, просто чтобы убедиться, что поток правильный? Передается ли класс авторизации экземпляру Eve в первую очередь? И т.п.   -  person Nicola Iarocci    schedule 09.05.2015
comment
привет @NicolaIarocci, мое требование состоит в том, что я хочу сделать вызов POST на конечной точке людей без какой-либо аутентификации, а аутентификация обязательна при вызове POST, GET на других конечных точках.. PS: - Мой запрос [{ 'firstname': 'Tushar ', 'фамилия': 'Sappal', 'электронная почта': '[email protected]', 'номер телефона': 123456789, 'userid': '', 'пароль': 'testtushar' } ] Да Экземпляр класса аутентификации прошло правильно, но поток попадает только тогда, когда я указываю имя пользователя и пароль, иначе он не попадает..   -  person tushar_sappal    schedule 09.05.2015


Ответы (1)


Попробуйте установить public_methods на ['POST'] для ресурса people (см. документацию). Или вы можете установить PUBLIC_METHODS, но тогда вы откроете метод POST для всех конечных точек API.

person Nicola Iarocci    schedule 09.05.2015
comment
Я попытался установить public_methods на ['POST'] в people, но он все равно запрашивает учетные данные. Схема ресурса людей. people = { 'item_title': 'person', 'cache_control': 'max-age=10,must-revalidate', 'cache_expires': 10, 'resource_methods': ['GET', 'POST'], 'schema': dbtableSchema.schema_people, 'PUBLIC_METHODS': ['POST'] } и DOMAIN это DOMAIN = { 'people': people, 'org': org, 'puburl': puburl, 'address': address, 'contactnumber': contactnumber, 'template': template, 'usersharedcontacts': usersharedcontacts, 'cardholder': cardholder } - person tushar_sappal; 09.05.2015
comment
Я сделал глупую ошибку, установив public_methods, я написал PUBLIC_METHODS вместо public_methods.. Спасибо @Nicola, это сработало ... - person tushar_sappal; 09.05.2015