認証にtwitterの数字を使用するiOSおよびdjangoアプリに取り組んでいます。私はしばらくドキュメントを読んでいますが、何が間違っているのかわかりません。
コミュニケーション モデルは、ユーザーが Twitter Digits を利用した iOS アプリにサインアップすることです。これにより、ユーザーの身元を確認するための確認コードを含むテキスト メッセージがユーザーに送信されます。ユーザーの身元が確認されたら、iOS アプリからサーバーに通知して、サーバーが新しいユーザー モデルを作成し、ユーザーの電話番号を安全に保存できるようにしたいと考えています。
現在、Line 8 での Twitter 数字からの応答は次のとおりです。
{"errors":[{"code":215,"message":"Bad Authentication data."}]}
私が試したこと/やったこと:
1) コンシューマ キー、コンシューマ シークレット、および API キーが Fabric のアプリと一致することを 3 重、4 重にチェックしました。
2)とOAuthEchoHeadersToVerifyCredentials
を含める以外に、さまざまな方法を使用OAuthEchoHeadersForRequestMethod
OAuthEchoHeadersToVerifyCredentialsWithParams
3) 動作する Web フロントエンドでデバッグ。これにより、iOS アプリから送信された認証情報が不安定であることが明らかになりました。
バックエンド コードは次のとおりです。
def signup(request):
api_url = request.POST['apiUrl']
auth_headers = request.POST['authHeader']
# security stuff done here
headers = {'Authorization': auth_headers}
response = requests.get(api_url, headers=headers) # Line 8
data = json.loads(response.content)
user, created = User.objects.get_or_create(
phone_number=data['phone_number'],
digits_id=data['id'],
first_name=request.POST['firstName'],
last_name=request.POST['lastName']
)
return JsonResponse({'success': True, 'created': created})
フロントエンドのコードは次のとおりです。
@IBAction func goToNextView() {
let firstName = "Joe"
let lastName = "Schmoe"
let digits = Digits.sharedInstance()
digits.authenticateWithCompletion { (session, error) in
if (session != nil) {
let digits = Digits.sharedInstance()
let oauthSigning = DGTOAuthSigning(authConfig: digits.authConfig, authSession: session)
let authHeaders = oauthSigning.OAuthEchoHeadersToVerifyCredentials()
let apiUrl = authHeaders[TWTROAuthEchoRequestURLStringKey]
let authHeader = authHeaders[TWTROAuthEchoAuthorizationHeaderKey]
let url = NSURL(string: "http://localhost:8000/signup")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
let bodyData = "apiUrl=\(apiUrl!)&authHeader=\(authHeader!)&firstName=\(firstName)&lastName=\(lastName)"
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)
self.defaultSession.dataTaskWithRequest(request, completionHandler: { (data, response, error) in
print("todo")
}).resume()
}
}
}
参考までに、Web フロントエンドは次のとおりです。
Digits.logIn()
.done(onLogin)
function onLogin(loginResponse){
// Send headers to your server and validate user by calling Digits’ API
var oAuthHeaders = loginResponse.oauth_echo_headers;
var verifyData = {
authHeader: oAuthHeaders['X-Verify-Credentials-Authorization'],
apiUrl: oAuthHeaders['X-Auth-Service-Provider'],
firstName: $('#firstName').val(),
lastName: $('#lastName').val()
};
$.post('/signup', verifyData)
.done(function(response){ alert(response); });
}
2 つのフロントエンドで異なる認証ヘッダーは次のとおりです。 - oauth_nonce、oauth_signature、および明らかに oauth_timestamp
ただし、2 つの共有: - Oauth_consumer_key、oauth_token、バージョン、および署名方法
誰かが以前に似たようなことに遭遇した場合は、私に知らせてください。本当にありがとう!