2017-01-24 6 views
1

Я пытаюсь решить проблему с базовой аутентификацией в фляге с помощью HTTPBasicAuth.Флажок HTTPBasicAuth none token внутри заголовка

Когда я получаю доступ через curl или веб-браузер, все работает хорошо. Это примеры которых работает:

curl -u [access_token]:unused -i X GET http://127.0.0.1:5000/api/v1/token 

или

http://[access_token]:[email protected]:5000/api/v1/token 

Но когда я использую Authorization: Basic [token] или Authorization: Basic [token]:unused в заголовке запроса я получаю 500 ошибку от сервера.

Верификация маркер доступа или адрес электронной почты и пароль:

@auth.verify_password 
def verify_password(email_or_token, password): 

    user = User.verify_auth_token(email_or_token) 
    if not user: 

     user = User.query.filter_by(email = email_or_token).first() 
     if not user or not user.verify_password(password): 
     return False 
    g.user = user 
    return True 

модель Пользователь:

class User(db.Model): 

    def generate_auth_token(self, expiration = 600): 
     s = Serializer(app.config['SECRET_KEY'], expires_in = expiration) 
     return s.dumps({ 'id': self.id }) 

    @staticmethod 
    def verify_auth_token(token): 
     s = Serializer(app.config['SECRET_KEY']) 
     try: 
      data = s.loads(token) 
     except SignatureExpired: 
      return None # valid token, but expired 
     except BadSignature: 
      return None # invalid token 
     user = User.query.get(data['id']) 
     return user 

Я обнаружил, что, когда я использую маркер или адрес электронной почты и пароль в заголовке, как Basic [token/email]:[password/unused], email_or_token и password Свойства: None.

Error: TypeError: argument of type 'NoneType' is not iterable

enter image description here

Почему возникает ошибка при использовании Authorization: Basic [token/email]:[password/unused] в заголовке запроса? Что такое решение для этого?

ответ

1

Вы должны Base64-кодировать часть учетных данных заголовка авторизации. Это можно сделать с помощью служебной программы командной строки base64.

echo 'token:unused' | base64 

Из примера here, имя пользователя пароль сочетание Aladdin:OpenSesame становится:

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l 

Причина, по которой вам не придется беспокоиться об этом с curl или браузер, является то, что они будут выполнять автоматическое кодирование для вас.