Facebook oauth在新窗口中打开而不是弹出窗口

时间:2011-04-15 18:14:38

标签: c# facebook facebook-graph-api

我正在使用C#来获取FB令牌。所以,一旦我将用户重定向到此链接:

https://graph.facebook.com/oauth/authorize?........

它打开一个新页面而不是弹出窗口(FB javascript SDK,我试图避免)。

该查询中有'display = popup',它不起作用。我也试过'window.open(...),

但是有些浏览器会使用阻止程序阻止此类弹出窗口...

有没有办法打开一个原创的Facebook弹出窗口,然后回到C#代码后面做所有的魔术......?

1 个答案:

答案 0 :(得分:0)

有一个单独的页面来管理Facebook登录。从主页面打开相同的内容

window.open(“”../ Helper / FBLoginMgr.aspx?login = fb“,”_ blank“,”height = 900,width = 800,menubar = 0,resizable = 1,scrollbars = 1,status = 0,标题栏= 0,工具栏= 0" );

在页面加载事件中的FBLoginMgr.aspx中,您可以这样做:

        if (Request["login"] != null)
        {
            //First time
            url = "https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope=offline_access,read_stream,user_activities";
            Response.Redirect(string.Format(url, app_id, redirect_url));
        }

        if (Request["code"] != null)
        {
            //Second time
            url = "https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&client_secret={2}&code={3}";

...

初始查询字符串参数login = fb只是向Login mgr表明它刚刚启动并需要启动Facebook授权。第二个Request [“code”]是Facebook在用户授权后发布的参数。

Once the access token is retrieved, set a hidden variable to indicate that the job is done. Then in the aspx page you could have something like this:


    $(document).ready(function () {
        alert("Time to say good bye");
        if (document.getElementById('<%=amidone.ClientID %>').value == "yes") {
            window.parent.opener.doneWithLogin();//Indicate to the parent page
            window.close();
        }
    });