2017-01-24 5 views
1

HTTPBasicAuthを使用してフラスコの基本認証の問題を解決しようとしています。Flask HTTPBasicAuthヘッダ内にトークンがありません

私がカールまたはウェブブラウザを使用してアクセスしているときは、すべて正常に動作します。 この作品例です:私はリクエストのヘッダにAuthorization: Basic [token]またはAuthorization: Basic [token]:unusedを使用していたときに

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 

しかし、私は、サーバーから500エラーを取得します。私はBasic [token/email]:[password/unused]email_or_tokenpasswordとしてトークンまたはヘッダー内のメールアドレスとパスワードを使用していたときにことがわかっ

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 

@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 

Userモデル:トークンまたはメールアドレスとパスワードのアクセスを確認

プロパティはNoneです。リクエストのヘッダにAuthorization: Basic [token/email]:[password/unused]を使用しながら

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

enter image description here

なぜエラーが発生しますか?このための解決策は何ですか?

答えて

1

Authorizationヘッダーの資格情報部分をBase64エンコードする必要があります。これはコマンドラインbase64ユーティリティで行うことができます。

echo 'token:unused' | base64 

hereから、Aladdin:OpenSesameのユーザー名とパスワードの組み合わせは次のようになります。

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l 

あなたがcurlまたはブラウザでこれを心配する必要はありません理由は、彼らが実行するということです自動的にエンコーディングを行います。

関連する問題