使用Javascript API检索访问令牌

| 这是该主题的后续内容:将signed_request和AJAX调用传递给装饰有CanvasAuthorize的ActionMethod 由于我无法使signed_request不能为null,因此我认为我要在客户端对用户进行身份验证,然后将访问令牌与AJAX调用一起发送到服务器端(ASP.NET MVC) 。不幸的是,我也无法使它正常工作!这是我的Javascript代码(从文档中获得):
function postOnFacebook(msg, itemLink, pic, itemTitle, signedReq) {
    var siteUrl = \'http://www.localhost:2732\';

    var appID = 193005690721590;
     if (window.location.hash.length == 0) {
       var path = \'https://www.facebook.com/dialog/oauth?\';
       var queryParams = [\'client_id=\' + appID,
         \'redirect_uri=\' + window.location,
         \'response_type=token\',
         \'scope=offline_access\'];
       var query = queryParams.join(\'&\');
       var url = path + query;
       window.open(url);
     } else {
       var accessToken = window.location.hash.substring(1);   
       var path = \"https://graph.facebook.com/me?\";
       var queryParams = [accessToken];
       var query = queryParams.join(\'&\');
       var url = path + query;

   // use jsonp to call the graph
       var script = document.createElement(\'script\');
       script.src = url;
       document.body.appendChild(script);   
     }

    $.ajax({
        url: \'/Facebook/Share\',
        data: {
            \'message\': msg,
            \'link\': siteUrl + itemLink,
            \'picture\': siteUrl + pic,
            \'name\' : itemTitle,
            \'accessToken\': accessToken
        },
        type: \'get\',
        success: function(data) {
            if(data.result == \"success\") {
                alert(\"item was posted on facebook\");
            }
        }
    });
}
这是我的服务器端代码:
    public ActionResult Share(string message, string link, string picture, string name, string accessToken)
    {
        if (FacebookWebContext.Current.Session == null)
            return RedirectToAction(\"Login\");

        var fb = new FacebookWebClient(accessToken);
        var postArgs = new Dictionary<string, string>();
        postArgs[\"message\"] = message;
        postArgs[\"link\"] = link;
        postArgs[\"picture\"] = picture;
        postArgs[\"name\"] = name;

        fb.Post(\"/me/feed\", postArgs);
        return Json(new {result = \"success\"}, JsonRequestBehavior.AllowGet);
    }
}
更新: 我试过了,但是对我没用。当我第一次单击该按钮时,它会将我重定向到FB登录页面,然后将我返回到我的网站的主页。之后,它所要做的就是重定向,然后立即返回主页。什么都没有发布。 有什么建议么?     
已邀请:
Facebook Javascript SDK文档在这里:https://developers.facebook.com/docs/reference/javascript/ 有几种使用Javascript SDK获取访问令牌的方法。有些是同步的,有些是异步的,有些让您订阅事件,例如登录状态的更改,有些则获得会话对象(包含访问令牌)以响应诸如提示许可之类的事情。 这是一个简单的示例:
<input id=\"AccessToken\" type=\"text\" value=\"\" />
<div id=\"fb-root\"></div>
<script src=\"https://connect.facebook.net/en_US/all.js\" type=\"text/javascript\"></script>
<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js\" type=\"text/javascript\"></script>
<script type=\"text/javascript\">
    $(document).ready(function () {

        FB.init({ 
            appId: \'insert your appID value here\', 
            cookie: true, 
            xfbml: true, 
            status: true });

        FB.getLoginStatus(function (response) {
            if (response.authResponse) {
                $(\'#AccessToken\').val(response.authResponse.accessToken);
            } else {
                // do something...maybe show a login prompt
            }
        });

    });
</script>
一旦获得了捕获的访问令牌的客户端,就可以将其以表单或Ajax调用的形式发布到服务器。 要检查的另一件事是您的环境。 Facebook会查看进行这些api调用的域是否与您的应用设置匹配。在端口80上尝试使用它,并使用带有DNS的真实域指向您的服务器(而不是localhost)。使用DynDns或其他类似的服务来设置指向您的开发箱的域名和DNS条目。在应用程序端口80和防火墙/路由器端口转发设置上运行IIS,在开发箱上运行IIS,以便在与Facebook应用程序设置匹配的真实域的端口80上提供页面。     

要回复问题请先登录注册