django - 使用 Django 社交身份验证出错
问题描述
我一直在使用我当前的项目进行社交身份验证,但我收到一个错误,这会导致另外两个错误,具体取决于用于登录的社交媒体平台。
从社交媒体平台成功重定向后,我的自定义模型管理器创建用户出现错误,用户必须输入 Google auth 的密码或用户必须输入 Facebook auth 的密码。
从以上这些错误可以总结出 Django 试图在从社交平台重定向后立即创建一个用户帐户。
我的第一个问题是这种行为是否应该被认为是正常的,因为如果用户已经拥有一个帐户,可能会出现一些并发症。
其次,如果行为正常,那么我应该如何完成注册过程。
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_django\utils.py", line 49, in wrapper
return func(request, backend, *args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_django\views.py", line 33, in complete
*args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\actions.py", line 43, in do_complete
user = backend.complete(user=user, *args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\base.py", line 40, in complete
return self.auth_complete(*args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\utils.py", line 259, in wrapper
return func(*args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\facebook.py", line 111, in auth_complete
return self.do_auth(access_token, response, *args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\facebook.py", line 153, in do_auth
return self.strategy.authenticate(*args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_django\strategy.py", line 107, in authenticate
return authenticate(*args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\django\contrib\auth\__init__.py", line 73, in authenticate
user = backend.authenticate(request, **credentials)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\base.py", line 80, in authenticate
return self.pipeline(pipeline, *args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\base.py", line 83, in pipeline
out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\backends\base.py", line 113, in run_pipeline
result = func(*args, **out) or {}
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\pipeline\user.py", line 75, in create_user
'user': strategy.create_user(**fields)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_core\strategy.py", line 53, in create_user
return self.storage.user.create_user(*args, **kwargs)
File "C:\Users\SAM\Envs\my_django_environment\lib\site-packages\social_django\storage.py", line 79, in create_user
user = cls.user_model().objects.create_user(*args, **kwargs)
File "C:\Users\SAM\Desktop\Crackerbox\users\models.py", line 14, in create_user
raise ValueError("User must enter an email address.")
ValueError: User must enter an email address.
[31/Jan/2019 19:29:32] "GET /oauth/complete/facebook/?granted_scopes=public_profile&denied_scopes&code=AQBt4yAKBum6I8F_XanHwnD-i_9ZTAXhVxOKt0WRQNER7HON2jlO5WTQlmuizKZ0ChI7tJvLT4pp_wLmO5X5gCWAcWqyJYZwyE4UqBJS1WUIL984W-vCawU24M0WsWKW27dhxqAK2ClgXDBTK3YfitvbjdPNEse7dLIBTyNDg926j7IKtQ_dpjsVECmEuAhZOM_vE3TQ5BOElalMxw8laBjWFi_vbhPdPAgFjKtwE3chE_d17n5samw_uamKNmegqYpmX2iZje2xIix56dLZuCvuAwAQaqfYjExgujOe9ZhYE2XHP7M9fG_TYBy-zW1Q8yIFR8iwsCWmQWeLl1jreWvl&state=7UPt8glMyksSPvFzJR4okb1PDvUbgMWK HTTP/1.1" 500 176183
自定义用户模型
def create_user(self, email,username, password=None, is_active=True, is_admin= False, is_staff = False, is_profiled =False):
if not email:
raise ValueError("User must enter an email address.")
if not password:
raise ValueError("User must enter a password.")
if not username:
raise ValueError("User must enter a username.")
user_obj = self.model(email= self.normalize_email(email),
username = username )
user_obj.set_password(password)
user_obj.staff = is_staff
user_obj.admin = is_admin
user_obj.active = is_active
user_obj.profiled = is_profiled
user_obj.username = username
user_obj.save(using= self._db)
return user_obj
谢谢
解决方案
在自己之后添加请求,在电子邮件之前
def create_user(self, email,username, password=None, is_active=True, is_admin= False, is_staff = False, is_profiled =False):
推荐阅读
- excel - 错误消息:下一个控制变量引用无效
- python - 获取csv中每个日期的最小和最大日期时间
- html - 在调整桌面显示以保持移动设备的完整性时遇到问题
- psake - 简单的 Psake 构建因“共享任务”异常而失败
- python - 如何将本地函数应用于python函数中数据框的特定列?
- sql - 使用 SQL 搜索字符串中出现次数最多的值
- python-3.x - 如何进行 72 小时倒计时
- java - 创建主题时如何从 Java Kafka AdminClient 获取详细的错误消息
- python - 使用python将逗号分隔值到Dict
- javascript - 将存储在数组中的文件附加到 HTML 文件输入 [jQuery]