有没有人真正获得ASP.NET MVC 5 Identity Facebook登录开箱即用? (loginInfo始终返回null)

时间:2016-02-19 15:27:20

标签: facebook oauth asp.net-mvc-5 owin

使用Visual Studio 2013 Update 5,我创建了一个样板MVC 5应用程序,其中选择了个人用户帐户身份验证选项,我一直在尝试使用模板代码实现社交登录,但一直未成功。

我确保所有NuGet包都是最新的,代码使用的是MVC 5.2.3; Owin 3.0.1; AspNet.Identity 2.0.0。

我可以使一切工作正常,包括使用OtpSharp的验证器应用程序,但Facebook登录无论我尝试什么都不起作用。

我创建了Facebook App,在其上设置了所有相关选项,并在我的Startup.Auth.cs文件中设置了AppId和AppSecret。

当我尝试使用Facebook登录时,MVC网站会将我重定向到Facebook,这会提示我使用该应用的auth屏幕。我单击确定并接受此然后我被重定向回MVC应用程序。如果我在我的Facebook帐户下检查授权的应用程序,我的应用程序会被列出并显示它已授予该应用程序检索电子邮件地址的权限。

回调工作正常,但是当它遇到ExternalLoginCallback时,特别是:

var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync()

loginInfo始终返回null。

查看请求时,它显示错误access_denied

https://localhost:44301/Account/ExternalLoginCallback?ReturnUrl=%2Fmanage&error=access_denied

我已经阅读了几乎所有关于此错误的博文和SO问题,虽然其中大部分内容都很有用,但大多数也过时且不相关。

似乎模板化项目中缺少某些东西,或者其他地方已经发生了变化,因为无论我阅读哪个教程,我设置的选项,结果都是一样的。

我已经在运行IIS Express的开发机器上内部尝试了这个,并且在运行IIS 7.5的托管计算机上进行了外部尝试,结果是相同的。

我甚至已经反编译了Microsoft.Owin.Security.Facebook库,以查看查询字符串的特定部分设置为无帮助的位置。

如果我有任何头发,我现在已经全力以赴了。

我会接受任何建议。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

Facebook喜欢让事情变得困难。 Access_denied听起来像是故意阻止你。检查您的开发者信息中心以及授权在开发模式下测试应用的帐户。默认情况下会批准电子邮件权限,因此这不是您的问题。

确保您在此处测试的帐户已添加到此处:

facebook dashboard roles example

如果没有解决问题,请确保您在域名部分中列出了正确的应用域名(测试和实时):

without the domain here, it will think someone else is trying to jack your app

答案 1 :(得分:2)

我有完全相同的问题。无论我做什么,facebook都会显示登录信息,获取权限,然后返回登录页面,而不是电子邮件确认页面。

使用Fiddler Facebook将调用“http://localhost:1234/signin-facebook&code= SOME_SECRET_CODE_HERE ”,然后我的应用程序的控制器将调用“http://localhost:1234/ExternalLoginCallback?error=access_denied”。我确信Facebook拒绝访问。只有在实施Facebook Javascript SDK示例之后,才意识到我可以成功登录并查看FB范围!

  

我的开发环境

     
      
  • MVC 5应用程序
  •   
  • Visual Studio 2013社区版更新5
  •   
  • Microsoft.OWIN v2.2.1
  •   
  • Microsoft.OWIN.Security.Facebook v3.0.1
  •   

最后,我发现了一个YouTube Video by ProCoder,其中提到了将有效OAuth重定向URI 中的正确路径设置为 http://localhost:1234/signin-facebook ,并且它有效。如果您尚未添加,则需要将 Facebook Login 产品添加到您的Facebook应用程序中。

我还将App Domain设置为 localhost ,并将网站网址设置为 http://localhost:1234/

我已将 127.0.0.1 MY.EXTERNAL.PUBLIC.IP 添加到服务器IP白名单 安全 strong>在Facebook应用的高级设置选项中。

我在一个新的MVC 5应用程序中复制了所有这些设置,它就像一个魅力。

答案 2 :(得分:1)

将包Owin.Security.Facebook 3.0.1更新为3.1.0

它对我有用