我正在使用python social auth来使用社交登录,但在成功登录后我无法重定向到最后一页.
例如,如果我在下一页http://localhost:8000/docprofile/14/并单击登录按钮,而不是将我重定向到最后一页,http://localhost:8000/docprofile/14/它会将我重定向到登录页面.
如果我这样说:
<a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}"> | Login with Facebook</a>
Run Code Online (Sandbox Code Playgroud)
它重定向到登录页面,网址以奇怪的字符结尾:
http://localhost:8000/login/#_=_
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
<a href="{% url 'social:begin' 'facebook' %}?next={{ request.get_full_path }}"> | Login with Facebook</a>
Run Code Online (Sandbox Code Playgroud)
这次它确实采取了路径,/docprofile/14但仍然没有重定向我,并带我到URL的登录页面http://localhost:8000/login/?next=/docprofile/14/#_=_
将python social auth添加到我安装的应用程序后,即
INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
Run Code Online (Sandbox Code Playgroud)
然后尝试一个
python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)
我得到一个不足为奇的权限错误
Migrations for 'default':
0002_auto_20150217_2053.py:
- Alter field user on usersocialauth
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/lib/python2.7/site-packages/django/core/management /__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/usr/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 124, in handle
self.write_migration_files(changes)
File "/usr/lib/python2.7/site-packages/django/core/management/commands /makemigrations.py", …Run Code Online (Sandbox Code Playgroud) 现在我尝试设置python-social-app
在facebook登录后,用户名/密码重定向到错误页面,我不知道为什么会发生这种情况......
在我的设置中我已经'social.backends.facebook.FacebookOAuth2'和我正确设置SOCIAL_AUTH_FACEBOOK_KEY并且秘密所以真的在哪里看错误.
追溯
Environment:
Request Method: GET
Request URL: http://website.com:8000/complete/facebook/?redirect_state=IuQDEiyX2bbS8Uhk7MR3hpRFLNZlW2Y5&code=AQDH5kqBibfy9bi21M9tTieujRAqvJVYdAb2UPFvfH6DVXoCWrrtamRA99Ze5-6cC6qHPiNq-a3XbGh2Gg4pbdFfM4OTpCEpWkPID6SZrHfAoEan8Q68cV17LDgsryX_M45QoXd0knpbE0x-QwAPwdoFmKQGHLw7xomCHeN5pCtrWhtoYQIrsFE1UQZZaxt4qtLzAmfmCRjDO7Et_S75fngLiomM0PfevTChLbHJHMYaqy6DBkgGZqZK-bXrqLaNFnBEoZ3M956DwCg4ZtTnvxulR4sXH9ZV3IoxVhL0JxMVsGnT2H_0wdKujIDPKcdPKZc&state=IuQDEiyX2bbS8Uhk7MR3hpRFLNZlW2Y5
Django Version: 1.8.3
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'frontend',
'social.apps.django_app.default')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
Traceback:
File "/Users/simon/Freelancer/env/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/simon/Freelancer/env/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/Users/simon/Freelancer/env/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
File "/Users/simon/Freelancer/env/lib/python2.7/site-packages/social/apps/django_app/utils.py" in wrapper
51. return func(request, backend, *args, **kwargs) …Run Code Online (Sandbox Code Playgroud) 我在这里阅读了文档: django-rest-framework-social-oauth2,但是对我来说一切都还不清楚(这是我第一次使用它)。
最后,它显示了如何进行设置以使用facebook Oauth2的一些配置。并且在文档中有此信息:
您可以通过运行以下命令来测试这些设置:
Run Code Online (Sandbox Code Playgroud)curl -X POST -d “grant_type=convert_token&client_id=<client_id>&client_secret=<client_secret>&backend=facebook&token=<facebook_token>” http://localhost:8000/auth/convert-token该请求返回您应在所有带有DRF的HTTP请求上使用的“ access_token”。这里发生的是,我们正在转换访问令牌中的第三方访问令牌(user_access_token)以与您的api及其客户端(“ access_token”)一起使用。您应该在系统/应用程序与api之间的每次通信以及以后的通信中使用此令牌,以对每个请求进行身份验证,并避免每次都使用FB进行身份验证。
这是否意味着借助此端点,我将能够以某种方式“覆盖” sing up在我的应用程序中使用与Facebook上相同的user_access_token创建用户的方法?
如果这是正确的,以我的理解。得到FB.getLoginStatus响应后,我将能够在自己的API端点上调用其登录用户,并使用他的facebook user_acess_token进行调用(这在我的系统上也是如此)。
我想我还需要向用户模型添加社交帐户令牌?
我对吗?
python django oauth-2.0 django-rest-framework python-social-auth
我想在身份验证管道的末尾添加一个函数,该函数旨在检查该用户是否有“配置文件”表,如果没有,它将创建一个表。Profiles 模型是一个表,我在其中存储了有关用户的一些额外信息:
class Profiles(models.Model):
user = models.OneToOneField(User, unique=True, null=True)
description = models.CharField(max_length=250, blank=True, null=True)
points = models.SmallIntegerField(default=0)
posts_number = models.SmallIntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)
每个用户都必须有一个 Profiles 表。所以,我在管道的末尾添加了一个函数:
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
'app.utils.create_profile' #Custom pipeline
)
#utils.py
def create_profile(strategy, details, response, user, *args, **kwargs):
username = kwargs['details']['username']
user_object = User.objects.get(username=username)
if Profiles.ojects.filter(user=user_object).exists():
pass
else:
new_profile = Profiles(user=user_object)
new_profile.save()
return kwargs
Run Code Online (Sandbox Code Playgroud)
我收到错误:
KeyError at /complete/facebook/
'details'
...
utils.py in create_profile
username = kwargs['details']['username']
Run Code Online (Sandbox Code Playgroud)
我是 python 社交身份验证的新手,看起来我遗漏了一些明显的东西。任何帮助将不胜感激。
Facebook 是否始终验证其用户的电子邮件地址?我正在使用 Django(使用 python-social-auth)构建一个应用程序,我希望人们能够使用他们的 Facebook 帐户登录。据我了解,电子邮件始终经过验证。即使注册者使用了他/她的电话号码。如果他们稍后输入电子邮件,该电子邮件仍将被验证。
但是,我不确定之前是否是这种情况。我们可以相信 Facebook 已经验证了所有帐户的所有电子邮件吗?
我想检查用户是通过社交身份验证还是使用django默认身份验证登录.
就像是
如果user.social_auth = true?
有时,当我尝试登录或注册 Facebook 或 Google 时,它会返回一个错误AuthStateForbidden屏幕
但只要刷新页面或过一段时间再试,它就可以正常运行。
我试过添加Google+ APIGoogle 开发人员,但 Facebook 也有同样的问题。
任何的想法?
提前致谢!
我使用Python -社会-身份验证为我的Django的网站,让我们说:example.io。它正在工作。但是,在重新部署并尝试通过 Twitter 登录后,它重定向到错误的 URL,example只是,没有.io
我还尝试使用另一个 url, staging.example.io, 它仍然重定向到example, 没有staging和io
我尝试在本地部署它,所以 URL 是localhost:12345,并且它重定向到正确的 URL(到 localhost:12345 或 127.0.0.1:12345),并成功登录。
有人知道吗?
更新:我尝试使用另一个 url,例如 abc.def.com,但仍然重定向到example(没有 .io)。LinkedIn 社交身份验证也发生了这种情况。
如果他们愿意,我希望用户能够在不使用第 3 方的情况下进行注册。很少有网站需要用户名才能登录,所以我想使用电子邮件而不是用户名。
django-rest-framework-social-oauth2结合了python-social-auth和django-oauth-toolkit。
python-social-auth 包含一个EmailAuth后端,应该让用户使用电子邮件和密码进行注册。但是,我不明白使用它而不是特定于 Django 的身份验证后端的含义,并且文档将其标记为“遗留”,这听起来有点可怕。
事实上,我不知道如何创建帐户(包括来自 3rd 方的帐户)如何与 Django 用户模型相关,因为它需要用户名。
使用 EmailAuth 会丢失什么?这是去这里的理想方式,还是有其他选择?
出于我不明白的原因,Django 仍然不支持电子邮件而不是没有自定义用户模型的用户名,因此无论我需要为基于电子邮件的帐户使用定制的或开源的东西。
编辑:蟒蛇-社会- AUTH只是填充与用户名字段username = email.split('@', 1)[0]如图所示这里。我想我可能需要创建一个自定义的 Django 用户模型并将 python-social-auth 指向它,但我不确定如何,我不确定这是否仍应通过 EmailAuth 或独立于 python-social 使用- 授权。
django rest registration django-rest-framework python-social-auth