PassportJS (サーバーは NodeJS) で Facebook iOS SDK を使用しようとしています。iOS アプリで Facebook に正常にログインできました。次に、アクセス トークンをサーバーに渡し、そこから検証します。残念ながら、まったく機能しません。
奇妙な部分は、私のウェブサイトでは問題なく動作することです。コールバック URL を使用してトークンをサーバーにポストするだけです。
したがって、Facebookログイン後にコードで何が起こるか(これは機能します)
/*
* Callback for session changes.
*/
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen:
if (!error) {
// We have a valid session
NSString *token = session.accessTokenData.accessToken;
NSLog(@"User session found: %@", token);
[[NSNotificationCenter defaultCenter] postNotificationName:nGotFacebookSession object:nil userInfo:@{
@"token": token
}];
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
[[NSNotificationCenter defaultCenter]
postNotificationName:FBSessionStateChangedNotification
object:session];
if (error) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}
次に、ログイン コントローラーで通知を受け取ります。
- (void) facebookLogin: (NSNotification*) notification
{
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
NSString *token = [notification.userInfo objectForKey:@"token"];
[[CBApi sharedAPI] get:@"api/auth/facebook/callback" andParams:@{
@"code": token
} andCallback:^(NSDictionary *json) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
if ([json objectForKey:kError]) {
Alert(@"Error", @"Login details failed");
} else {
User *u = [User createEntity];
u.email = self.emailField.text;
[self dismissViewControllerAnimated:YES completion:nil];
}
}];
}
そして、サーバーからこのエラーが返されます(コンソールからコピーペーストされます):
failed to obtain access token (status: 400 data: {
"error": {
"message": "Invalid verification code format.",
"type": "OAuthException",
"code": 100
}
})
先ほど言ったように、Web サイトをログインに使用すると完全に機能します。問題ありません。iOS ネイティブで生成されたアクセス トークンを受け入れないだけです。私はこれまでにこのような fb ログインをしたことがありません。あなたが私を助けることができれば、それは本当に素晴らしいことです、とにかくありがとう!