2

是否可以通過選項卡應用程序對用戶進行身份驗證?Facebook選項卡身份驗證

我想創建一個ASP.NET MVC 3的Facebook標籤應用程序,需要能夠張貼到牆上。使用CanvasAuthorizeAttribute

[CanvasAuthorize(Permissions="publish_stream")] 

我的第一個猜測是,但它使我的標籤重定向到登錄Facebook的授權頁面,然後返回到的畫布頁面,而不是停留在的粉絲專頁(標籤)。

然後我刪除CanvasAuthorize和嘗試了以下

public string Index() 
{ 
    bool isAuthorized = FacebookWebContext.Current.IsAuthorized("publish_stream"); 

    return isAuthorized.ToString(); 
} 
從我可以決定啓動授權彈出,如果用戶沒有被授權

,但我在這裏面臨的一個問題。

  • 此前授權與通過其他手段,然後stream_publish權限的應用程序,運行在網頁作爲一個應用程序(http://apps.facebook.com/MYAPP/ MYTAB)返回運行從一個的fanpage標籤的頁面(http://www.facebook.com/而myfanpage?sk = app_ myappid)返回false

爲什麼選項卡不能讀取權限,但畫布頁可以?

回答

3

從您的Facebook頁面,您可以通過檢查signed_request來檢測用戶是否授權您的應用程序。如果傳遞了user_id和oauth_token,那麼用戶已經授權您的應用程序。如果沒有,你可以從你的控制器動作做這樣的事情:在您的用戶進行身份驗證您的應用程序

string[] extendedPermissions = new[] { "publish_stream", "manage_pages" }; 
    var oauth = new FacebookOAuthClient(FacebookWebContext.Current.Settings); 
    var parameters = new Dictionary<string, object> { 
       { "redirect_uri", "http://www.facebook.com/pages/{SomeFacebookPage}?sk=app_{appId}"} 
      }; 

    parameters["scope"] = String.Join(",", extendedPermissions); 
    var loginUrl = oauth.GetLoginUrl(parameters); 

    return Redirect(loginUrl.AbsoluteUri); 

,用戶將被髮送到「REDIRECT_URI」,它可以在一個Facebook頁面您的應用程序選項卡。