我对 Django-SocialAuth 不是很有经验,但我想知道它是否因为新的 Django 1.5 自定义用户而不起作用,您可以在其中使用电子邮件而不是用户名登录。实现了自定义用户后,我只是尝试将 SocialAuth 实现到我现有的 Django 1.5 项目中。无法使用 Twitter 登录。
是否有任何 SocialAuth 专业人士在这里为我可能遗漏的内容提供建议?
我一直在看很多教程,但似乎没有任何效果:
设置.py
LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/logged-in/'
LOGIN_ERROR_URL = '/login-error/'
SOCIAL_AUTH_COMPLETE_URL_NAME = 'socialauth_complete'
SOCIAL_AUTH_ASSOCIATE_URL_NAME = 'socialauth_associate_complete'
AUTH_USER_MODEL = 'my_app.User'
SOCIAL_AUTH_USER_MODEL = 'my_app.User'
TWITTER_CONSUMER_KEY = 'xx'
TWITTER_CONSUMER_SECRET = 'xx'
AUTHENTICATION_BACKENDS = (
'social_auth.backends.twitter.TwitterBackend',
'django.contrib.auth.backends.ModelBackend',
)
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.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
'social_auth.context_processors.social_auth_by_name_backends',
'social_auth.context_processors.social_auth_backends',
'social_auth.context_processors.social_auth_by_type_backends',
'social_auth.context_processors.social_auth_login_redirect',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'widget_tweaks',
'pipeline',
'south',
'social_auth',
'my_app',
)
网址.py
url(r'', include('social_auth.urls'),name="twitter"),
(r'^login/$', custom_login),
登录.html
<a href='{% url "socialauth_begin" "twitter" %}'>twitter</a>
错误信息:
URLError at /login/twitter/
<urlopen error [Errno 110] Connection timed out>
Request Method: GET
Request URL: http://127.0.0.1:8000/login/twitter/
Django Version: 1.5
Exception Type: URLError
Exception Value:
<urlopen error [Errno 110] Connection timed out>
Exception Location: /usr/lib/python2.7/urllib2.py in do_open, line 1181
更新
根据要求,这是完整的回溯。似乎令牌不被接受(unauthorized_token)。我已经仔细检查了 Twitter 密钥和密钥。一切似乎都是正确的。
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/login/twitter/
Django Version: 1.5
Python Version: 2.7.3
...
Traceback:
File "/home/kave/vc/d-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "/home/kave/vc/d-env/local/lib/python2.7/site-packages/social_auth/decorators.py" in wrapper
29. return func(request, request.social_auth_backend, *args, **kwargs)
File "/home/kave/vc/d-env/local/lib/python2.7/site-packages/social_auth/views.py" in auth
31. return auth_process(request, backend)
File "/home/kave/vc/d-env/local/lib/python2.7/site-packages/social_auth/views.py" in auth_process
97. return HttpResponseRedirect(backend.auth_url())
File "/home/kave/vc/d-env/local/lib/python2.7/site-packages/social_auth/backends/__init__.py" in auth_url
620. token = self.unauthorized_token()
File "/home/kave/vc/d-env/local/lib/python2.7/site-packages/social_auth/backends/__init__.py" in unauthorized_token
679. return Token.from_string(self.fetch_response(request))
File "/home/kave/vc/d-env/local/lib/python2.7/site-packages/social_auth/backends/__init__.py" in fetch_response
701. response = dsa_urlopen(request.to_url())
File "/home/kave/vc/d-env/local/lib/python2.7/site-packages/social_auth/utils.py" in dsa_urlopen
255. return urlopen(*args, **kwargs)
File "/usr/lib/python2.7/urllib2.py" in urlopen
127. return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py" in open
401. response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py" in _open
419. '_open', req)
File "/usr/lib/python2.7/urllib2.py" in _call_chain
379. result = func(*args)
File "/usr/lib/python2.7/urllib2.py" in https_open
1219. return self.do_open(httplib.HTTPSConnection, req)
File "/usr/lib/python2.7/urllib2.py" in do_open
1181. raise URLError(err)
Exception Type: URLError at /login/twitter/
Exception Value: <urlopen error [Errno 110] Connection timed out>