使用 Javascript API 检索访问令牌 [英] Retrieve Access Token Using Javascript API

查看:25
本文介绍了使用 Javascript API 检索访问令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是该主题的后续:将signed_request 和AJAX 调用一起传递给一个用CanvasAuthorize 修饰的ActionMethod

由于我无法将 signed_request 设为 null 以外的任何内容,因此我想我会在客户端对用户进行身份验证,然后将访问令牌与 AJAX 一起发送到服务器端 (ASP.NET MVC)称呼.不幸的是,我也不能让它工作!这是我的 Javascript 代码(我从文档中获得):

Since I couldn't get the signed_request to be anything other than null, I thought I'd authenticate the user on the client side, then send the access token to the server side (ASP.NET MVC) along with the AJAX call. Unfortunately, I cannot get that to work either! Here's my Javascript code (which I've got from the documentation):

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");
            }
        }
    });
}

这是我的服务器端代码:

And this is my server-side code:

    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 登录页面,然后将我返回到我网站的主页.之后,它所做的就是重定向,然后立即返回主页.什么都没有发布.

I tried this but it did not work for me. When I click on the button for the first time, it redirects me to the FB login page and then returns me back to my website's home page. After that, all it does is redirect and then back to the home page right away. Nothing gets posted.

有什么建议吗?

推荐答案

Facebook Javascript SDK 文档在这里:https://developers.facebook.com/docs/reference/javascript/

The Facebook Javascript SDK documentation is here: https://developers.facebook.com/docs/reference/javascript/

有多种使用 Javascript SDK 获取访问令牌的方法.有些是同步的,有些是异步的,有些让您订阅诸如登录状态更改之类的事件,有些则获取会话对象(其中包含访问令牌)以响应提示权限之类的事情.

There are several methods of getting the access token using the Javascript SDK. Some are synchronous, some asynchronous, some let you subscribe to events such as changes in login state, some get the session object (which contains the access token) in response to things like prompting for permissions.

这是一个简单的例子:

<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 调用的形式发布到服务器.

Once you have the access token captured client side you can post it in a form or ajax call to the server.

要检查的另一件事是您的环境.Facebook 将查看进行这些 api 调用的域是否与您的应用设置相匹配.在端口 80 上尝试它,并使用带有指向您的服务器(不是本地主机)的 DNS 的真实域.使用 DynDns 或其他一些此类服务来设置指向您的开发框的域名和 DNS 条目.在您的开发箱上运行 IIS,并在端口 80 和防火墙/路由器端口转发设置上运行您的应用程序,以便您可以在与您的 Facebook 应用程序设置匹配的真实域上的端口 80 上为您的页面提供服务.

Another thing to check is your environment. Facebook will look to see if the domain making these api calls matches up with your app settings. Try it on port 80, and with a real domain with DNS that points at your server (not localhost). Use DynDns or some other such service to setup a domain name and DNS entry that points at your dev box. Run IIS on your dev box with your app on port 80 and the firewalls/router port forwarding setup so you can serve your pages on port 80 on a real domain that matches your Facebook app settings.

这篇关于使用 Javascript API 检索访问令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆