Django:Twitter 登录被重定向到示例域
Django: Twitter login being redirected to Example Domain
我正在使用 django-socialregistration
让用户能够在我的应用程序上使用他们的 Twitter 帐户登录。
settings.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rango',
'django.contrib.sites',
'socialregistration',
'socialregistration.contrib.twitter'
)
...
...
TEMPLATE_CONTEXT_PROCESSORS = ('django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.media', 'django.core.context_processors.static', 'django.contrib.messages.context_processors.messages', 'django.core.context_processors.request',)
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'socialregistration.contrib.twitter.auth.TwitterAuth',
)
TWITTER_CONSUMER_KEY = 'XXXXXXXXXXXXXXXXXX'
TWITTER_CONSUMER_SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXX'
SITE_ID = 1
SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'
urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'GetEvangelized.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^rango/', include('rango.urls')),
url(r'^social/', include('socialregistration.urls',
namespace = 'socialregistration')))
模板
<body>
<h1>MicroCelebrity Form</h1><br>
{% load twitter %}
{% twitter_button %}
<br>
<form id="evangelized_form" method="post" action="/rango/fillform/">
{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.errors }}
<b>{{ field.help_text }}</b><br>
{{ field }}<br><br>
{% endfor %}
<input type="submit" name="submit" value="Submit" />
</form>
</body>
但是,在点击 Twitter 注册按钮时,我被重定向到:
本网页url如下:
http://example.com/social/twitter/callback/?oauth_token=_WtPXwAAAAAAgTIEAAABTim7zYE&oauth_verifier=TheZd4yPsHNCYEi6mPwIvkugirkz20yH
我的推特应用设置如下:
Callback URL http://127.0.0.1:8000/auth/twitter/callback
Sign in with Twitter Yes
App-only authentication https://api.twitter.com/oauth2/token
Request token URL https://api.twitter.com/oauth/request_token
Authorize URL https://api.twitter.com/oauth/authorize
Access token URL https://api.twitter.com/oauth/access_token
Website http://www.cloudclovis.com
Callback url http://127.0.0.1:8000/auth/twitter/callback
'Example Domain'网页是什么意思?当我点击该页面上的 'More Information' link 时,我被重定向到 http://www.iana.org/domains/reserved
这是什么意思?我怎样才能让我的用户在我的应用程序中使用他们的 Twitter 帐户登录?
它在文档中说:
Also not that Twitter for example will not accept
http://localhost:8000 as a valid domain for the callback URL so you’ll
have to use http://127.0.0.1:8000 when developing your site.
编辑:好的,我现在看到您完全做到了。
您能否提供有关错误的更多详细信息?
它重定向到那里是因为默认 sites
framework 将 example.com
作为默认站点。
如果您处于开发模式,则需要将其更改为 127.0.0.1:8000
。
要更改它,您可以使用默认的管理界面,或者直接使用 django shell:
from django.contrib.sites.models import Site
site = Site.objects.get(pk=1)
site.domain = '127.0.0.1:8000'
site.save()
我正在使用 django-socialregistration
让用户能够在我的应用程序上使用他们的 Twitter 帐户登录。
settings.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rango',
'django.contrib.sites',
'socialregistration',
'socialregistration.contrib.twitter'
)
...
...
TEMPLATE_CONTEXT_PROCESSORS = ('django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.media', 'django.core.context_processors.static', 'django.contrib.messages.context_processors.messages', 'django.core.context_processors.request',)
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'socialregistration.contrib.twitter.auth.TwitterAuth',
)
TWITTER_CONSUMER_KEY = 'XXXXXXXXXXXXXXXXXX'
TWITTER_CONSUMER_SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXX'
SITE_ID = 1
SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'
urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'GetEvangelized.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^rango/', include('rango.urls')),
url(r'^social/', include('socialregistration.urls',
namespace = 'socialregistration')))
模板
<body>
<h1>MicroCelebrity Form</h1><br>
{% load twitter %}
{% twitter_button %}
<br>
<form id="evangelized_form" method="post" action="/rango/fillform/">
{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.errors }}
<b>{{ field.help_text }}</b><br>
{{ field }}<br><br>
{% endfor %}
<input type="submit" name="submit" value="Submit" />
</form>
</body>
但是,在点击 Twitter 注册按钮时,我被重定向到:
本网页url如下:
http://example.com/social/twitter/callback/?oauth_token=_WtPXwAAAAAAgTIEAAABTim7zYE&oauth_verifier=TheZd4yPsHNCYEi6mPwIvkugirkz20yH
我的推特应用设置如下:
Callback URL http://127.0.0.1:8000/auth/twitter/callback
Sign in with Twitter Yes
App-only authentication https://api.twitter.com/oauth2/token
Request token URL https://api.twitter.com/oauth/request_token
Authorize URL https://api.twitter.com/oauth/authorize
Access token URL https://api.twitter.com/oauth/access_token
Website http://www.cloudclovis.com
Callback url http://127.0.0.1:8000/auth/twitter/callback
'Example Domain'网页是什么意思?当我点击该页面上的 'More Information' link 时,我被重定向到 http://www.iana.org/domains/reserved
这是什么意思?我怎样才能让我的用户在我的应用程序中使用他们的 Twitter 帐户登录?
它在文档中说:
Also not that Twitter for example will not accept http://localhost:8000 as a valid domain for the callback URL so you’ll have to use http://127.0.0.1:8000 when developing your site.
编辑:好的,我现在看到您完全做到了。 您能否提供有关错误的更多详细信息?
它重定向到那里是因为默认 sites
framework 将 example.com
作为默认站点。
如果您处于开发模式,则需要将其更改为 127.0.0.1:8000
。
要更改它,您可以使用默认的管理界面,或者直接使用 django shell:
from django.contrib.sites.models import Site
site = Site.objects.get(pk=1)
site.domain = '127.0.0.1:8000'
site.save()