2011-05-06 120 views
2

我正在facebook應用程序上工作。我正在從我的應用用戶那裏獲得離線訪問權限。現在我希望我可以使用用戶第一次使用我的應用時生成一次的相同令牌,並且我將該令牌存儲在我的數據庫中,並且每當用戶在我們的網站上再次登錄並希望通過我們的應用發佈一些帖子時我們將在牆上發佈相同的標記。Facebook離線訪問.NET SDK

這裏是我的代碼

protected void Page_Load(object sender, EventArgs e) 
{ 
    var auth = new CanvasAuthorizer { Permissions = new[] { "user_about_me", "publish_stream", "video_upload", "share_item", "photo_upload", "offline_access" } }; 

    var fbWebContext = FacebookWebContext.Current; 
    if (fbWebContext.IsAuthorized()) 
    { 
     try 
     { 
      var fb = new FacebookWebClient(fbWebContext); 
      var token = fb.AccessToken; \\ Im Getting Token This Way When its Generated From User After Getting Extended Permission 
      dynamic result = fb.Get("/me"); 
      long id = fbWebContext.UserId; 
     } 
     catch (Exception ex) 
     { 
      if ("(OAuthException) Error validating access token: The session is invalid because the user logged out or because auth.expireSession was invoked." == ex.Message) 
      { 
       fbWebContext.DeleteAuthCookie(); 
       Session.Clear(); 
      } 
     } 
    } 
} 

我使用var token = fb.AccessToken獲得訪問令牌,但是當我使用它,它說

您的令牌在UNIX時間XXXXXXXXXX已過期。

任何人都可以告訴我任何人,如果這是訪問令牌請求脫機訪問的擴展權限後,爲什麼它說「您的訪問令牌已過期?」。任何人都可以幫忙嗎?

+0

Ramhound:我想你是錯誤的。基本上在oAuth 2.0中有不同類型的認證。帶有過期令牌和不可過期令牌。當用戶獲得任何Facebook應用程序的擴展權限時,Facebook提供不可過期令牌。 – 2011-05-06 22:13:57

+0

您正在使用哪個庫來處理認證/權限請求? – dwarfy 2011-05-07 11:44:57

+0

我想你可以嘗試自己做oauth過程,這只是建立一個URL並加載它的問題..? – dwarfy 2011-05-07 11:54:07

回答

0

主要的問題在這裏,即使你要求offline_access許可,你不能100%肯定的令牌永遠不會exipre。

Access Access令牌可能會過期 - 即使是offline_access - 場景,例如:用戶更改密碼,應用程序機密更改等。在這些和其他情況下,您的應用程序必須能夠檢測到無效訪問令牌並通過驗證流程傳遞用戶以獲取新的新令牌。

您可以測試你的訪問令牌,並通過使用訪問令牌和訪問令牌皮棉工具,讓他們調試:https://developers.facebook.com/tools/access_tokenhttps://developers.facebook.com/tools/access_token/lint

要仔細檢查你已經成功地得到了有效的令牌,複製和粘貼一個你通過API獲得了圖形瀏覽器工具。 https://developers.facebook.com/tools/explorer/?method=GET&path=me