Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 2.0-使用allauth登录Facebook-Can';t加载URL:此URL的域为';t包括在应用程序中';s域_Python_Django_Facebook Login_Django Allauth - Fatal编程技术网

Python Django 2.0-使用allauth登录Facebook-Can';t加载URL:此URL的域为';t包括在应用程序中';s域

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

我正在做一个小项目,需要登录facebook。我在当地工作

使用的技术是Django 2.0、Django allauth,为了避免因未使用SSL连接而产生的错误,我将Django sslserver用作开发服务器

当我点击网站上的facebook登录按钮时,我被重定向到以下地址:

我有一个错误:

无法加载URL:此URL的域未包含在应用程序的 域名。要加载此URL,请添加所有域和子域 将应用程序的名称添加到应用程序设置中的“应用程序域”字段

我的设置.py文件的一部分:

# 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,我才把大部分问题解决了。以下是我为了完成这个过程而遵循的步骤

  • 安装django sslserver并将sslserver添加到已安装的应用程序列表中
  • 现在如果你在Ubuntu上,那么编辑这个文件
    /etc/hosts
    ,并添加这个
    127.0.0.2 development.com
    。显然,您可以使用任何其他地址,但域名必须是该地址
  • 现在回到你的应用设置上的facebook开发者页面,然后你需要将应用程序域添加到
    https://development.com:8000/
    并在底部网站部分添加网站url作为
    https://development.com:8000/
    。 注意:在客户端OAuth设置中,只有“Force Web OAuth Reauthentication”(强制Web OAuth重新验证)将设置为“否”,否则所有内容都将为“是”
  • 保存这些更改并转到facebook登录设置页面,在那里添加有效的OAuth重定向URI,如
    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: