我正在编写Flask RESTful服务器和AngularJS客户端,并且遇到了一个问题,即用户名和密码信息在传输中丢失,可以这么说。
在Javascript控制台中,我可以告诉客户端正在按预期发送Authorization标头:Authorization: Basic username:password
。但是,在@ auth.verify_password回调中,它们都是空的。
我在代码的服务器部分进行了相当多的单元测试,并且auth信息似乎存在于所有代码中,因此我可以放心,我至少可以从头部获取用户名和密码在某些情况下。
此外,我已将CORS扩展添加到服务器代码,并允许它在服务器范围内。看起来OPTIONS(总是返回200)到下面的url总是在GET之前被调用(由于用户名和密码问题而返回401)到同一个url。
参考代码:
服务器身份验证回调:
@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代码,在浏览器中检查时产生适当的标头,但在auth回调中为空用户名和密码:
$http.get(silkyAppConstants.BASE_URL + '/api/users/token', {
headers: { "Authorization": "Basic " + username + ":" + password }
})