Python Django 2.0-使用allauth登录Facebook-Can';t加载URL:此URL的域为';t包括在应用程序中';s域
我正在做一个小项目,需要登录facebook。我在当地工作 使用的技术是Django 2.0、Django allauth,为了避免因未使用SSL连接而产生的错误,我将Django sslserver用作开发服务器 当我点击网站上的facebook登录按钮时,我被重定向到以下地址: 我有一个错误: 无法加载URL:此URL的域未包含在应用程序的 域名。要加载此URL,请添加所有域和子域 将应用程序的名称添加到应用程序设置中的“应用程序域”字段 我的设置.py文件的一部分:Python Django 2.0-使用allauth登录Facebook-Can';t加载URL:此URL的域为';t包括在应用程序中';s域,python,django,facebook-login,django-allauth,Python,Django,Facebook Login,Django Allauth,我正在做一个小项目,需要登录facebook。我在当地工作 使用的技术是Django 2.0、Django allauth,为了避免因未使用SSL连接而产生的错误,我将Django sslserver用作开发服务器 当我点击网站上的facebook登录按钮时,我被重定向到以下地址: 我有一个错误: 无法加载URL:此URL的域未包含在应用程序的 域名。要加载此URL,请添加所有域和子域 将应用程序的名称添加到应用程序设置中的“应用程序域”字段 我的设置.py文件的一部分: # SECURITY
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['mysite.com', 'localhost']
# Application definition
INSTALLED_APPS = [
# My Apps
'account',
# Django Apps
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
# Third party Apps
'sslserver',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'django_social_website.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# allauth specific context processors
# "allauth.account.context_processors.account",
# "allauth.socialaccount.context_processors.socialaccount",
],
},
}
]
WSGI_APPLICATION = 'django_social_website.wsgi.application'
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {
'facebook': {
'METHOD': 'oauth2',
'SCOPE': ['email', 'public_profile', 'user_friends'],
'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
'INIT_PARAMS': {'cookie': True},
'FIELDS': [
'id',
'email',
'name',
'first_name',
'last_name',
'verified',
'locale',
'timezone',
'link',
'gender',
'updated_time',
],
'EXCHANGE_TOKEN': True,
'LOCALE_FUNC': 'path.to.callable',
'VERIFIED_EMAIL': False,
'VERSION': 'v2.12',
}
}
# facebook
SOCIAL_AUTH_FACEBOOK_KEY = '****************' # App ID
SOCIAL_AUTH_FACEBOOK_SECRET = '***********************************' # app key
# little options for your page's signup.
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = True
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('account/', include('account.urls', namespace='account')),
path('social-auth/', include('allauth.urls'), name='social-begin'),
]
login.html模板文件的一部分:
{% extends "base.html" %}
{% load socialaccount %}
{% providers_media_js %}
<div class="social">
<ul>
<li class="facebook"><a href="{% provider_login_url "facebook" method="oauth2" %}">Login with Facebook</a></li>
</ul>
</div>
这里有几个“developers.facebook.com”网站上的设置截图,看看它目前是如何配置的。我一直在尝试很多不同的选择,但其中任何一个都是有效的。
谢谢你的帮助 Facebook需要一个真正的URL,所以你需要给它一个,例如www.development.com,然后在你的主机文件中(我不知道该文件在Mac或PC上是什么,但在Linux上是主机),直接在localhost下面或后面添加一行
www.development.com 127.0.0.1
这就是我所做的,而且它是有效的。最后,感谢@HenryM和非常友好的同事们,我让它工作起来了irc://irc.freenode.net/django. 在这个网站上,你可以看到Facebook有不同的要求,这取决于你的网站是在2018年3月之前还是之后创建的:
让我的应用程序正常运行的正确设置是以下答案:
1)您需要ssl连接: 我用过 2)设置与本地主机不同的域,例如“development.com” 如果希望本地工作域为“development.com”,请使用Windows添加“127.0.0.1 development.com” 3)在“developers.facebook.com”上设置: 基本设置
-应用程序域:“AnySite.com”
-隐私策略URL:“
-网站:“
高级设置
-服务器IP白名单:为空
-域管理器:让它为空 Facebook登录设置
-是客户端OAuth登录
-是Web OAuth登录
-是(新:强制)对redicect URL使用严格模式
-是嵌入式浏览器OAuth登录
-是,请执行HTTPS
-有效的OAuth重定向URL:
“”(强制性)
我希望有帮助 我也被困在了同一个问题上,多亏了@ralfillo,我才把大部分问题解决了。以下是我为了完成这个过程而遵循的步骤
/etc/hosts
,并添加这个127.0.0.2 development.com
。显然,您可以使用任何其他地址,但域名必须是该地址https://development.com:8000/
并在底部网站部分添加网站url作为https://development.com:8000/
。
注意:在客户端OAuth设置中,只有“Force Web OAuth Reauthentication”(强制Web OAuth重新验证)将设置为“否”,否则所有内容都将为“是”https://development.com:8000/accounts/facebook/login/callback/
python manage.py上运行sslserver 127.0.0.2:8000
https://development.com:8000/
然后您应该能够看到服务器正在运行。现在做你的facebook认证,它会很好地工作嗨@HenryM,不工作。这是我一直在尝试的事情之一。经过你的推荐,我又试了一次。不确定,但我担心问题出在Facebook的网站选项上。还有其他想法吗?干杯:)我有这个
https://development.com:8000/
在我的测试应用程序的Facebook页面上的网站url中,我与Python Social auth开发一起使用,它适用于我,我使用的是Windows 10,在尝试了您推荐的内容和它的一些变体之后,我在Facebook上遇到了相同的错误:“无法加载URL:此URL的域未包含在应用程序的域中。若要加载此URL,请将应用程序的所有域和子域添加到应用程序设置中的“应用程序域”字段。“。这可能与我的Django应用程序如何与Facebook通信有关吗?当你在浏览器中运行该应用程序时,url是development.com
?如果它显示的是127.0.0.1
,这就是Facebook将看到的内容。Facebook向我提供错误信息的url: