Django-allauth未配置Facebook应用:请使用Django管理界面添加SocialApp。

10

我正在尝试在我的项目中设置Django-allauth。 我遇到了这个错误,而且无法修复它。

环境:

Request Method: GET Request URL: `http://localhost:8000/accounts/login/`

Django Version: 1.4.2 Python Version: 2.7.3 
Installed Applications:
('django.contrib.auth',  
'django.contrib.contenttypes', 
'django.contrib.sessions',  
'django.contrib.sites', 
'django.contrib.messages',  
'django.contrib.staticfiles',  
'core', 
'allauth',  
'allauth.account',  
'allauth.socialaccount', 
'allauth.socialaccount.providers.facebook', 
'allauth.socialaccount.providers.twitter',  
'django.contrib.admin', 
'django.contrib.admindocs') 

已安装的中间件:

('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware')


Template error: In template
/media/Dump/Sites/wtr/allauth/templates/socialaccount/snippets/login_extra.html,
error at line 3    No Facebook app configured: please add a SocialApp
using the Django admin    

       1 : {% load socialaccount %}
       2 : 
       3 :  {% providers_media_js %} 
       4 : 
       5 :

我实际上在Django Admin中配置了一个Facebook应用程序,但不明白为什么会出现这个异常。

 Exception Type: ImproperlyConfigured at /accounts/login/ Exception
 Value: No Facebook app configured: please add a SocialApp using the
 Django admin
  • 我将所有的allauth应用程序添加到了INSTALLED_APPLICATIONS
  • 添加了TEMPLATE_CONTEXT_PROCESSORS设置
  • 编辑了AUTHENTICATION_BACKENDS设置
  • urls.py中添加了allauth URL

这些步骤是否足够完成任务,还是还有其他内容需要添加?如果有,您能否指向相关文档?

7个回答

19

问题可能出在您的数据库上。认为您需要同步数据库。

执行操作

python manage.py syncdb

如果这不起作用,请确保您添加Facebook应用程序的Site具有域名localhost:8000(如果您使用localhost)或127.0.0.1:8000(如果您使用127.0.0.1:8000)。

更多信息请查看allauth教程

更新

您还可以尝试从管理中删除example.com站点,然后添加一个使用localhost:8000127.0.0.1:8000的新站点,并在新站点下添加Facebook社交应用程序。另外,请勿忘记在settings.py文件中设置SITE_ID变量。


我尝试同步数据库,但没有成功。实际上,我按照最初的步骤遵循了相同的教程 :) 看起来那篇文章的其他3位评论者也遇到了这个问题。 - manu
我相当确定这与数据库有关,如果数据库中没有太多数据,可以尝试删除数据库并使用 syncdb 重新创建数据库。 - Amyth
2
根据您的建议,我删除了example.com和另一个虚拟站点。一开始并没有改变什么。重启后,我遇到了一个新的错误https://dev59.com/rWgt5IYBdhLWcg3wygab在我将SITE_ID设置为正确的数字后,甚至Facebook身份验证也开始工作了。感谢您抽出时间回复。 - manu
@manu,很高兴你解决了它,我完全忘记了SITE_ID变量,我已经相应地更新了答案以供其他用户参考。干杯。 - Amyth
@manu 如果你发现这个答案有帮助,请将其标记为已接受以关闭问题。 - Babu
4
在已经创建了的网站中查找正确的SITE_ID,可以在http://127.0.0.1:8000/admin/sites/site/中点击该网站并[查看地址栏](https://dev59.com/Z3vaa4cB1Zd3GeqPAjpp#21084927)。 - Bob Stein

13

我也遇到了同样的问题,问题出在SITE_ID上,默认情况下是1。然而,1被分配给默认的示例站点,当您看到管理面板时会出现。为了配置Facebook登录,我创建了我的网站,然后在settings.py中将SITE_ID替换为2,这样就可以解决问题了。另一种选择是删除示例站点,但如果您某个时候删除数据库并重新创建,则示例站点将再次出现。

我花了大约3个小时才意识到这一点…… :S


要找到已经在http://127.0.0.1:8000/admin/sites/site/创建的站点的正确SITE_ID,请单击该站点并[查看地址栏](https://dev59.com/Z3vaa4cB1Zd3GeqPAjpp#21084927)。 - Bob Stein

5
我遇到了同样的问题,我认为提供一些解释会对其他人有所帮助: django-allauth使用django-sites可能会让事情变得非常混乱。
在配置社交应用程序时,很容易意外添加站点。
要使它正常工作,您需要确保设置中的SITE_ID与您在Facebook应用程序中启用并在Django后端的社交应用程序中选择的域匹配。如果这三个位置中的任何一个指定的站点是错误的,您将收到“ ImproperlyConfigured...”错误。
如果像我一样从一开始就把它搞砸了,请执行以下操作以使Facebook身份验证正常工作:
  1. 转到您的Facebook应用程序并记录“网站URL”-这是您的Facebook应用程序将进行身份验证的唯一网站。为测试,我正在使用“http:// localhost:8000”。将其称为mysite。
  2. 转到django管理中的Facebook社交应用程序,并确保您已将mysite作为“选择的站点”中唯一的站点。如果列表中没有它,请使用admin / sites添加它。
  3. 进入admin / sites并删除不应存在的任何内容。
  4. 使用phpmyadmin或类似工具查看您的django_site表并记录mysite的site_id。
  5. 更新设置,以便SITE_ID设置为mysite id。
运行您的服务器,Facebook身份验证应该可以正常工作。

2
尽管这看起来很明显,但首先要登录Facebook开发者页面并创建一个新的应用程序。

facebook developer

接下来前往Django的管理网站,并点击“社交应用程序”的添加按钮。

django admin site

保存并设置SITE_ID,就像其他人提到的那样,这样就解决了我的“未配置Facebook应用程序”的问题。

2

我遇到了同样的问题,感谢大家提供有用的建议。这是我的解决方案:(我运行了chmod +x manage.py

1) ./manage.py syncdb
2*) ./manage.py schemamigration --initial socialaccount
(register new app on fb and add new Social app through admin)
3) ./manage.py shell
> from django.contrib.sites.models import Site
> site = Site.objects.create(domain='foo.com', name='foo.com')
> site.id
> ^C [y]
4) settings.py > add SITE_ID = 'your site.id'
5) test localhost:8000/accounts/login/

*使用installed South时需要使用schemamigration命令!


我之前的想法是错误的。需要更仔细地阅读。感谢这个答案,我找到了解决方法。 - Adam Starrh

1
我成功的方法是,在可用站点下选择(在这种情况下为默认的SITE_ID名称example.com),并添加到右侧的已选站点,然后在创建社交应用时保存。

Add the example site to the right pane


0
在settings.py中,site_id必须与您的站点的Django管理入口匹配(在测试期间可能是localhost:8000)。这位于“sites”标题下的“sites”选项中(同样,在管理员中)。要获取您的site_id...请单击“sites”。注意:仅因为您有2个条目且第二个是您的条目并不意味着site_id = 2。单击您的条目,然后在地址栏中查看数字。虽然此内容已在其他地方介绍过,但作为编码新手,我需要更明确的说明。 看到图片中的3了吗?那是我在“sites”中的第二个条目。

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