Windows Phone 8 Facebook身份验证

3
我正在为Windows Phone 8开发一个应用程序,希望用户能够使用他们的Facebook账户登录,这样他们就不必在我的应用程序上创建账户。
我看到了Facebook SDK for .NET,并决定使用它,因为它似乎非常高效和流行。
作为一个初学者,我按照SDK文档中的教程进行操作: http://facebooksdk.net/docs/phone/tutorial/ 我做了与教程中完全相同的事情,自从我登录以来一切都很好。我点击登录按钮,然后被重定向到他们在教程中称之为“FacebookLoginPage”的页面(一个具有空网格的.xaml文件,以便WebBrowser适合其中),然后出现了WebBrowser与Facebook页面,我可以在其中输入我的登录名和密码。之后,我被重定向到请求Facebook账户权限的页面,我点击确定。到目前为止一切顺利。
然后我遇到了问题。根据教程,我应该被重定向到所谓的“着陆页”,但实际上我被重定向到 Facebook 的“login_success”页面(https://www.facebook.com/connect/login_success.html‎),它显示“成功”和一个安全警告,然后就再也没有反应了...
我认为我的代码有问题,于是我花了几个小时来检查,但没有发现任何问题。于是我尝试运行他们在网站文档中提供的示例应用程序,只修改了其中的Facebook AppID(我放了我的AppID),结果出现了同样的问题。我还尝试了其他一些在Nokia Developer Wiki上找到的方法,但仍然无法解决。
所以我认为我的Facebook应用程序有问题,但我找不到原因...是否有人能给我帮助?我快要崩溃了:(
事先请原谅我的英语错误,祝您拥有愉快的一天!

更新:我最终按照这个教程 http://developer.nokia.com/Community/Wiki/Integrate_Facebook_to_Your_Windows_Phone_Application 成功了。


没有代码,就没有答案......你的选择:发布一个不起作用的小代码示例,找个人坐在你旁边帮忙,放弃或尝试其他示例。 - Alexei Levenkov
“我做了和教程里一模一样的事情” “所以,我试图运行他们在网站文档中提供的示例应用程序”那么,发布代码的意义何在?你不想回答我,这并不意味着其他人也不会。实际上,我在下面找到了我的答案... - MxFragz
在SO上发布好问题需要内联示例代码 - 如果您链接的网站更改了代码,您的帖子将不再对其他人有用怎么办?顺便说一下:如果您在答案中得到了一个好提示,至少应该投票支持它,如果它确实回答了您的问题,请将其标记为答案。 - Alexei Levenkov
我不能在StackOverflow上投票,因为我的“声望”不够。 - MxFragz
(我原以为您可以随时给自己的问题点赞......但显然这并不是真的 :( ) - Alexei Levenkov
3个回答

1
重定向到“https://www.facebook.com/connect/login_success.html‎”的url应该包含accessToken作为url参数,因此如果允许导航到此url,则确实存在安全风险,因为它会暴露accessToken。您需要监听WebBrowser控件的“Navigating”事件,如果浏览器正在导航到“https://www.facebook.com/connect/login_success.html‎”,则需要取消导航并从url参数中获取accessToken。
更新: 看起来FB已经将其OAuth登录响应从...login_success.html#access_token=更改为...login_success.html?#access_token=。现在在“#”字符之前有一个“?”字符。

我认为Facebook SDK for .NET应该自己完成这个任务。我按照文档中所说的完全相同的方法去做了... - MxFragz
我认为Facebook SDK是由第三方编写的,因此如果Facebook进行更改,正如Matt在上面所述,那么SDK很容易就会出现问题。 我经常编写访问云服务的代码,出于这个原因,我总是使用HTTP REST API。 - Jon
好的,我知道了。 你有我可以跟随的教程吗?这对我来说是新的! - MxFragz
哇,我刚刚运行了一些测试代码,除非我疯了(这是可能的),否则看起来FB已经将他们的OAuth登录响应从...login_success.html#access_token=<token>更改为...login_success.html?#access_token=<token>。现在在"#"字符之前有一个"?"字符。这就解释了为什么你正在使用的库没有正确解析访问令牌。 - Jon
哦,那也许有道理。我会等几天再试一下。谢谢你,Jon! - MxFragz

0

不,我还没有尝试过Windows Azure移动服务身份验证,我会去看一下。谢谢你提供的信息! - MxFragz

0

我正在使用Facebook SDK .NET for WindowsPhone的LoginButton控件,遇到了同样的问题。

我解决了这个问题,从github Facebook-WinClient-Sdk下载了项目,并更改了FacebookSessionClient类的第186行为以下内容:

Uri endUri = new Uri("https://m.facebook.com/connect/login_success.html?#access_token");

Facebook .net sdk团队肯定会修复这个问题,但我今天需要演示,所以必须让它正常工作!


你帮了我很多,但我仍然有麻烦! 我将“https://www.facebook.com/connect/login_success.html”更改为“https://m.facebook.com/connect/login_success.html?#access_token”,但它没有改变。 之后,我还在parameters["redirect_uri"] = "https://www.facebook.com/connect/login_success.html";中进行了更改。 之后,我可以登录,但是出现错误,说我提供的URL未经应用程序配置授权。有什么想法吗? - MxFragz
啊,这证实了我昨天在关于OAuth重定向更改的回答中发现的内容。FB文档仍显示旧的OAuth重定向,所以这一定是他们的错误,我认为当他们意识到错误时,他们会把它改回来。 - Jon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接