2017-01-24 421 views
1

我想解决使用HTTPBasicAuth烧瓶中的基本认证问题。烧瓶HTTPBasicAuth无标记内部标头

当我使用curl或web浏览器访问时,一切正常。 这是一个例子,其工作原理:

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_tokenpassword属性是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 

从例子hereAladdin:OpenSesame用户名密码组合而成:

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l 

,你不必担心这个与curl或者浏览器的原因,是他们将执行编码自动为你。