Django:如何识别通过哪个 link 用户完成了社交身份验证?
Django: How to identifying through which link user done social authentication?
我是 Django 开发环境的新手。请帮助我如何在 Django 应用程序中实现如下场景。
在我的网页中,有 links 可用于社交 signup/login 使用 python-social-auth 模块(对于脸书和 google)。我的系统中有两种类型的用户,TypeA 和 TypeB。
在网页中,每种类型都有不同的 link(如 TypeA-Facebook-Login、TypeB-Facebook-Login)。
每当通过 python-social-auth 服务创建用户时,都会添加一个 User
条目,使用 django.dispatch.receiver
我想进入 table TypeAUser
或 TypeBUser
。
*那么,我如何了解 link 用户是通过哪个注册的?
我曾尝试在社交身份验证 link 中添加一个额外参数,但我以后如何才能访问该信息?
<a href="{% url 'social:begin' 'facebook' %}?next={{request.path}}&profile_type=typea">
Login with faceboook</a>
下面是我写的@reciver函数。
@receiver(post_save, sender=User,dispatch_uid="add_user_profile")
def add_user_profile(sender,instance, **kwargs):
非常感谢您的建议和意见。
似乎是我自己想出了根据以下文档 reference.
通过 SOCIAL_AUTH_PIPELINE
概念来实现的
以下是我所做的修改:
使用自定义管道
将 SOCIAL_AUTH_PIPELINE
添加到 setting.py
# social authentication pipeline
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',
# custom pipeline
'user_profile.pipeline.create_user_profile'
)
还在settings.py
中添加了FIELDS_STORED_IN_SESSION
,如下
FIELDS_STORED_IN_SESSION = ['profile_type']
然后在user_profile.pipeline.py
中定义函数create_user_profile
如下:
def create_user_profile(strategy, details, user=None, is_new=False, *args, **kwargs):
print(strategy.session_get('profile_type'))
现在我可以从策略对象访问自定义值来创建不同类型的用户配置文件。
Link of reference
在用户点击的主link上,在url末尾添加了一个额外的参数如下:
http://domain.name.com/signupurl?profile_type=type1
http://domain.name.com/signupurl?profile_type=type2
我是 Django 开发环境的新手。请帮助我如何在 Django 应用程序中实现如下场景。
在我的网页中,有 links 可用于社交 signup/login 使用 python-social-auth 模块(对于脸书和 google)。我的系统中有两种类型的用户,TypeA 和 TypeB。
在网页中,每种类型都有不同的 link(如 TypeA-Facebook-Login、TypeB-Facebook-Login)。
每当通过 python-social-auth 服务创建用户时,都会添加一个 User
条目,使用 django.dispatch.receiver
我想进入 table TypeAUser
或 TypeBUser
。
*那么,我如何了解 link 用户是通过哪个注册的?
我曾尝试在社交身份验证 link 中添加一个额外参数,但我以后如何才能访问该信息?
<a href="{% url 'social:begin' 'facebook' %}?next={{request.path}}&profile_type=typea">
Login with faceboook</a>
下面是我写的@reciver函数。
@receiver(post_save, sender=User,dispatch_uid="add_user_profile")
def add_user_profile(sender,instance, **kwargs):
非常感谢您的建议和意见。
似乎是我自己想出了根据以下文档 reference.
通过SOCIAL_AUTH_PIPELINE
概念来实现的
以下是我所做的修改: 使用自定义管道
将SOCIAL_AUTH_PIPELINE
添加到 setting.py
# social authentication pipeline
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',
# custom pipeline
'user_profile.pipeline.create_user_profile'
)
还在settings.py
中添加了FIELDS_STORED_IN_SESSION
,如下
FIELDS_STORED_IN_SESSION = ['profile_type']
然后在user_profile.pipeline.py
中定义函数create_user_profile
如下:
def create_user_profile(strategy, details, user=None, is_new=False, *args, **kwargs):
print(strategy.session_get('profile_type'))
现在我可以从策略对象访问自定义值来创建不同类型的用户配置文件。 Link of reference
在用户点击的主link上,在url末尾添加了一个额外的参数如下:
http://domain.name.com/signupurl?profile_type=type1
http://domain.name.com/signupurl?profile_type=type2