2013-06-24 221 views
1

我正在開發iPhone應用程序,它基於與服務器的通信,並且我想使用Facebook身份驗證機制。使用Facebook訪問令牌服務器端身份驗證

基本上,我認爲它應該像這樣工作:

  1. 在我的iPhone應用程序,用戶登錄到Facebook,用他的電子郵件和密碼。
  2. 用戶允許訪問他的相關Facebook應用程序的數據。
  3. 我的iPhone應用程序在成功登錄後收到訪問令牌。
  4. 在與我的服務器進一步通信時,我的iPhone應用程序應該使用接收到的Facebook訪問令牌(例如:在查詢中)。當我的服務器從iPhone接收到某個查詢應用程序和訪問令牌,它應該詢問Facebook該令牌是否有效(以及誰),如果是,服務器應該假設用戶使用Facebook進行了身份驗證。

我的問題是:如果給定訪問令牌是有效的,服務器應如何詢問Facebook?我想我應該以某種方式檢查令牌是否對我的Facebook應用有效。

我已經嘗試了許多Facebook查詢來繪製API圖表,但我沒有發現,但沒有按預期工作。你能提供一些例子嗎?

+0

守ld用戶通過fb登錄或其他電子郵件登錄進入應用程序? – bhanu

+0

用戶應通過fb登錄進入.. – iCoder4777

+0

[Facebook訪問令牌服務器端驗證iPhone應用程序]的可能重複(http://stackoverflow.com/questions/5406859/facebook-access-token-server-side-validation- for-iphone-app) – rogerdpack

回答

8

我通過這個

NSString * accessToken = [[FBSession activeSession] accessToken]; 

然後用戶可以通過實施該方法獲得用戶的Facebook數據獲得的accessToken:

- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error 
    { 
     switch (state) 
     {   /// **************** IT GIVES THIS ACCESS TOKEN *****************///////////////////////// 
      case FBSessionStateOpen: 
      { 
         // https://graph.facebook.com/me?access_token=%@ 
       accessToken = [[FBSession activeSession] accessToken]; 
       NSLog(@"accessToken: %@",accessToken); 
       NSString *urlList = [NSString stringWithFormat:@"https://graph.facebook.com/me?access_token=%@",accessToken]; 
       NSURL *url1 = [NSURL URLWithString:urlList]; 
       NSURLRequest *urlReqst = [[NSURLRequest alloc] initWithURL:url1]; 
       NSData *dataConnection = [NSURLConnection sendSynchronousRequest:urlReqst 
                   returningResponse:nil 
                      error:nil]; 
       NSString *jsonData = [[NSString alloc] initWithData:dataConnection 
                  encoding:NSUTF8StringEncoding]; 
       NSDictionary *jsonDic = [jsonData JSONValue]; 

       self.appid = [jsonDic valueForKey:@"id"]; 
       self.appusername = [jsonDic valueForKey:@"username"]; 
       self.appfirst_name = [jsonDic valueForKey:@"first_name"]; 
       self.applast_name = [jsonDic valueForKey:@"last_name"]; 
       self.appname = [jsonDic valueForKey:@"name"]; 
       self.appemailId = [jsonDic valueForKey:@"email"]; 

       [self LoginAPI]; 
        if ([self.navigation.presentedViewController isKindOfClass:[LoginPage class]]) { 
        [self.navigation.presentedViewController dismissViewControllerAnimated:YES completion:nil]; 
       } 
      } 
       break; 
      case FBSessionStateClosed: 
      case FBSessionStateClosedLoginFailed: 
       [self.navigation popToRootViewControllerAnimated:NO]; 
          [self showLoginView]; 
       [self fbDidLogout]; 

       break; 
        default: 
       break; 
     } 
     if (error) 
     { 
      UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alertView show]; 
     } 
    } 

以及通過Facebook登錄獲取登錄到應用程序,你可能會經歷this sample

希望這會幫助你...

+0

不幸的是,這種方法並沒有驗證令牌是否爲您的應用程序生成,請參閱http://stackoverflow.com/questions/5406859/facebook-access-token-server-side-validation-換iphone應用程序內 – rogerdpack

相關問題