我正在使用PythonSocialAuth (v0.1.23),我需要将“注册”(创建新用户帐户)与登录区分开来。在PSA Django 示例中,如果新用户尝试登录,管道逻辑会将新用户重定向到“注册表单”;我想避免这种“登录或注册”行为。
我需要的是:
- 如果新用户尝试登录,则会引发错误。
- 强制新用户注册以创建新帐户/个人资料。
知道如何操纵 PSA 管道以实现此目的吗?(我使用的是 Django 1.6)。
提前致谢。
我正在使用PythonSocialAuth (v0.1.23),我需要将“注册”(创建新用户帐户)与登录区分开来。在PSA Django 示例中,如果新用户尝试登录,管道逻辑会将新用户重定向到“注册表单”;我想避免这种“登录或注册”行为。
我需要的是:
知道如何操纵 PSA 管道以实现此目的吗?(我使用的是 Django 1.6)。
提前致谢。
感谢您的意见和建议。我意识到如何解决我的问题,这是我的解决方案,希望对其他人有所帮助。
第一个问题是 PSA 对两者使用相同的管道:
因此,必须将一个管道流与另一个管道流区分开来。这可以完成(必须完成?)安排查询字符串:
<a href="{% url 'social:begin' 'facebook' %}?register=1">, 用于注册。<a href="{% url 'social:begin' 'facebook' %}">, 用于常规登录。第二个问题是如何读取registerPSA管道中的参数。此任务必须完成设置FIELDS_STORED_IN_SESSION(请参阅PSA 文档):
# settings.py
...
FIELDS_STORED_IN_SESSION = ['register']
最后,我的管道如下所示:
# settings.py
...
SOCIAL_AUTH_PIPELINE = (
'my.path.custom_pipeline.clean_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',
'my.path.custom_pipeline.redirect_to_join_form',
...
)
还有我的自定义任务:
# custom_pipeline.py
from social.pipeline.partial import partial
from django.contrib import messages
from django.shortcuts import redirect
def clean_pipeline(strategy, *args, **kwargs):
_register = strategy.session.get('register', None)
strategy.session.flush()
strategy.session['register'] = _register
@partial
def redirect_to_join_form(strategy, details, user=None, is_new=False, *args, **kwargs):
if user and user.username:
return
if is_new and strategy.session_get('register', False) == '1':
strategy.session.pop('register')
return redirect('users_join_form')
if is_new and strategy.session_get('saved_username'):
return {'username': strategy.session_get('saved_username')}
messages.add_message(
strategy.request, messages.ERROR,
"Error. Account not registered %s (%s), " %
(strategy.backend.name.capitalize(), details['username'])
)
return redirect('users_login')
就这样。希望能帮助到你。