python social auth单独的注册网址和登录django

时间:2015-06-02 10:33:51

标签: python django python-social-auth

我已经开始在django项目中使用python-social-auth来验证来自google,linkedin和其他潜在来源的用户。我能够将它集成到我的项目中,并用google和linkedin创建新用户。我理解管道的概念,但我仍然不清楚, 如何区分登录和注册?在我看来,python-social-auth只有一个用于登录和注册操作的管道。

我正在使用网址进行注册

'/login/linkedin/'

现在我有一个登录页面网址

'people/login/'

有两个按钮,一个是google登录,另一个是登录链接。现在,当新用户登录登录页面并点击linkedin登录时,理想情况下应该告诉他或向他显示您未通过链接注册的页面。

但是python social auth只有一个后端用于登录。那么如何在python social auth中分离登录和注册。

1 个答案:

答案 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