2012-09-06 99 views
8

我有幾個關於新FBSession問題再授權(reauthorizeWithPermissions:在Facebook的SDK 3.0 completionHandler :):行爲的Facebook的iOS SDK 3.0重新授權

一旦有人通過Facebook登錄我的應用程序,在我想用他/她的facebook憑證重新認證用戶的某些頁面。這是爲了確保查看該頁面的人員和發起登錄的人員相同。重新授權的權限與登錄保持一致。我需要的是重新確認用戶的密碼以確保這種情況。

因此,我使用reauthorisationWithPermissions:來做到這一點。我將行爲設置爲FBSessionLoginBehaviorForcingWebView,以確保用戶被迫輸入他/她的憑證。但是,這根本不起作用。它只是彈出一個空白的webview幾秒鐘,然後消失......此時,它調用FBSesstionStateHandler塊的狀態設置爲FBSessionStateOpen,但是,無法調用(completionHandler :)中定義的FBSessionReauthorizeResultHandler。但是,如果我簡單地將行爲設置爲默認(FBSessionLoginBehaviorWithFallbackToWebView),它通過在Facebook應用/ safari之間來回傳遞請求並通過正確調用completionHandler完成調用,可以正常工作。但是,默認行爲並不強制用戶重新輸入他/她的密碼。

所以我真的很困惑,網絡上的sdk文檔對我的情況不是很有用。有人能告訴我我做錯了什麼......或者在SDK中知道它的一個已知錯誤?如果是這樣,我該如何去滿足我的要求?

-(void) reauthThroughFacebook { 

if (!self.facebookSession.isOpen && self.facebookSession.state == FBSessionStateCreatedTokenLoaded) { 
    [self.facebookSession openWithBehavior: FBSessionLoginBehaviorWithNoFallbackToWebView 
         completionHandler: self.stateHandler]; 
} 

if (self.facebookSession.isOpen) { 
    [self.facebookSession reauthorizeWithPermissions: self.userPermissions 
              behavior: FBSessionLoginBehaviorForcingWebView 
            completionHandler:^(FBSession *session, NSError* error){ 
             if (self.facebookSession == session) { 
              [self completedReauthWithSuccess:(error == nil) error:error]; 
             } 
            }]; 
} else { 
    [self completedReauthWithSuccess:NO error:[NSError errorWithDomain: @"No active session found." 
                    code: FBErrorInvalid userInfo: nil]]; 
} 

} 

此外,一旦重新驗證的Web視圖中正確彈出,我如何確保用戶的電子郵件地址自動填充並阻止用戶不斷變化的形式呢?我可以訪問facebook sdk中的Web視圖來設置這些屬性嗎?

最後,如果re-auth以與登錄相同的權限進行,訪問令牌和失效日期會發生什麼?

在此先感謝,

+0

我想知道同樣的事情;似乎在sdk 3.1中reauthorizeWithPermissions:行爲:completionHandler:方法也被棄用。我 – Kevlar

回答

0

這是一個有趣的問題。我沒有編碼它,所以我不知道這是否會工作,但鑑於FB會議的工作方式,這是我最好的方法之一。

使用一個FB會話,我認爲你不能這樣做。在給定的會話中,FB auth是二進制的,或者是用戶登錄(即具有打開的會話)或不是。各種reauth方法旨在授權其他權限,現在不推薦使用方法來請求其他權限。

您可以通過支持多個FB會話來完成您想要的任務。次要身份驗證與允許第二位FB用戶登錄到您的應用程序基本相同。然後,您會在適當的時候關閉第二場會議。您可以通過比較FB用戶ID來強制執行這兩個會話是同一個FB用戶。

Understanding Sessions文檔的最後一段中,FB討論了支持多個會話。

相關問題