在我通过Facebook验证后,我收到了这个网址:
http://www.facebook.com/connect/login_success.html #access_token=161713100507627|2.R8bXAgr9wdiQYWJgVx_yPg__.3600.1301475600-100001169602345|sY- fl-62kCSgcn1pgiv2fYsltHE &expires_in=5996
如何解析此URL并获取访问令牌?
我尝试了request["access_token"]
,但它无效:我无法在#
之后得到任何内容。
生成网址的代码
string[] extendedPermissions = new[] { "publish_stream", "offline_access" };
var oauth = new FacebookOAuthClient { AppId = current.AppId, RedirectUri = urlli };
appId = current.AppId;
var parameters = new Dictionary<string, object>
{
{ "response_type", "token" },
{ "display", "popup" }
};
if (extendedPermissions != null && extendedPermissions.Length > 0)
{
var scope = new StringBuilder();
scope.Append(string.Join(",", extendedPermissions));
parameters["scope"] = scope.ToString();
}
var loginUrl = oauth.GetLoginUrl(parameters);
答案 0 :(得分:0)
好的,我想我有足够的信息可以回答你。我猜你是在浏览器中使用Silverlight(因为这是我所知道的唯一一个像这样返回的平台)。
您需要做的是在安装了浏览器应用程序的Silverlight的同一网站上设置一个页面(您没有选择必须这样做)。原因是在标签之后不会通知您任何内容。从本质上讲,页面的作用是向Silverlight应用程序执行ScriptNotify,从JavaScript传递完整的URL(它将包含主题标签内容 - “#access_token = ...”内容。)
您还需要在Facebook应用程序中设置(我认为您也可以在代码中的设置中进行调用)以指向此页面。在您的Silverlight中,您只需处理“ScriptNotify”事件即可。请参阅here for the sample web page和here for the sample Silverlight code
还有一件事,如果我正确猜到(并解决了)您的问题,请将我标记为答案。
答案 1 :(得分:0)
我使用我的WPF应用点击http://facebooksdk.codeplex.com/discussions/261528 - 这也可能适用于Silverlight。这是Facebook行为的变化与WPF(和Silverlight?)WebBrowser控件的问题之间的相互作用。通过切换到WinForms,我能够解决我的问题。该链接讨论了一种替代方法,该方法保留在WPF中但添加了对FacebookOAuthClient.ExchangeCodeForAccessToken()的调用。