我已经开始在django项目中使用python-social-auth来验证来自google,linkedin和其他潜在来源的用户。我能够将它集成到我的项目中,并用google和linkedin创建新用户。我理解管道的概念,但我仍然不清楚, 如何区分登录和注册?在我看来,python-social-auth只有一个用于登录和注册操作的管道。
我正在使用网址进行注册
'/login/linkedin/'
现在我有一个登录页面网址
'people/login/'
有两个按钮,一个是google登录,另一个是登录链接。现在,当新用户登录登录页面并点击linkedin登录时,理想情况下应该告诉他或向他显示您未通过链接注册的页面。
但是python social auth只有一个后端用于登录。那么如何在python social auth中分离登录和注册。
答案 0 :(得分:2)
你认为python-social-auth有一个用于登录和注册的管道是正确的。
您可能已经注意到管道中有一个名为create_user
的方法:
# Create a user account if we haven't found one yet.
'social.pipeline.user.create_user'
如果我们看一下源代码,那么在这里设置login
标志:
if user:
return {'is_new': False} # flag that it should log in the user
并且注册位于以下位置:
return {
'is_new': True, # this is a flag that tells the rest of the pipeline that the user should be registered
'user': strategy.create_user(**fields) # this is where object is created
}
strategy.create_user
最终使用用户模型的create_user
方法。
现在,您希望在注册前显示不同的页面,对吗?
python-social-auth中有一个概念partial pipeline
,它允许切断管道的过程,做一些自定义的事情,然后恢复管道。
为此,您需要创建一个视图并使用@partial
装饰器进行装饰。像这样:
@partial
def show_custom_page(strategy, details, user=None, is_new=False, *args, **kwargs):
# show your page here
看看这个example部分管道。
然后,将此视图的路径添加到SOCIAL_AUTH_PIPELINE
。
就是这样,它现在应该显示你的页面。
<强>更新强>
看起来部分管道链接已损坏。您可以找到另一个示例here。