私は Flask RESTful サーバーと AngularJS クライアントを書いていますが、いわば送信中にユーザー名とパスワードの情報が失われているように見える問題に直面しています。
Javascript コンソールでは、クライアントが Authorization ヘッダーを期待どおりに送信していることがわかりますAuthorization: Basic username:password
。ただし、@auth.verify_password コールバック内では、両方とも空です。
コードのサーバー部分についてかなりの単体テストがあり、認証情報はそれらすべてに存在しているように見えるため、場合によってはヘッダー内から少なくともユーザー名とパスワードを取得できることは心強いです.
さらに、CORS 拡張機能をサーバー コードに追加し、サーバー全体で使用できるようにしました。以下の URL への OPTIONS (常に 200 を返す) は、同じ URL への GET (ユーザー名とパスワードの問題により 401 を返す) の直前に常に呼び出されるようです。
参照コード:
サーバー認証コールバック:
@app.route('/api/users/token')
@auth.login_required
def get_auth_token():
token = g.user.generate_auth_token()
return jsonify({ 'token': token.decode('ascii') })
@auth.verify_password
def verify_password(email_or_token, password):
print 'email_or_token: ' + email_or_token
print 'password: ' + password
...
期待どおりに動作するサーバー ユニットのテスト コード:
def _get_user_token(self, email=TEST_EMAIL, password=TEST_PASSWORD):
headers = {
'Authorization': 'Basic ' + b64encode("{0}:{1}".format(email, password))
}
response = self.app.get('/api/users/token', headers=headers)
return response
ブラウザで検査すると適切なヘッダーを生成するが、認証コールバックで空のユーザー名とパスワードを生成する AngularJS コード:
$http.get(silkyAppConstants.BASE_URL + '/api/users/token', {
headers: { "Authorization": "Basic " + username + ":" + password }
})