无法验证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策略令牌。
男人你是救世主。感谢这一点。 – Calvintwr 2015-04-09 07:18:12