无法验证iOS中的PassportJS的access_token Facebook的SDK

问题描述:

我想用PassportJS(服务器是NodeJS)使用Facebook iOS sdk 我成功地设法在我的iOS应用上使用Facebook登录。接下来我要做的是将访问令牌移交给服务器并从那里进行验证。不幸的是它根本不起作用。无法验证iOS中的PassportJS的access_token Facebook的SDK

奇怪的是,我的网站,它工作正常。我只是使用回调URL将令牌发布到服务器。

- (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]; 
     } 
    }]; 
} 

然后我得到这个错误回来来自:

代码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]; 
    } 
} 

然后,在登录控制器的通知被收到

所以服务器(从控制台拷贝):

failed to obtain access token (status: 400 data: { 
    "error": { 
     "message": "Invalid verification code format.", 
     "type": "OAuthException", 
     "code": 100 
    } 
}) 

就像我说的,它充分的工作时,使用网站登录,没问题,只是它不接受iOS本地生成的访问令牌。我从来没有做过像这样的fb登录。如果你能帮助我,那真的太棒了,谢谢!

我想通了!对于任何人谁具有同样的问题,这是我做了什么: 而不是使用passportjs'正常Facebook的战略,用这个来代替:https://github.com/drudge/passport-facebook-token

它可以让你用积极的访问令牌,并在更换几乎下降为了我。 服务器为网站使用旧facebook策略(与passpostjs一起出现的策略)以及用于iOS登录的facebook策略令牌。

+0

男人你是救世主。感谢这一点。 – Calvintwr 2015-04-09 07:18:12