我有一个Django网站,我希望我的用户在我的应用程序中注册后可以使用google帐户登录。我是通过使用social-auth-app-Django软件包来完成的。但是现在我看到没有在我的网站中注册的人可以登录该网站。有什么问题吗?
答案 0 :(得分:0)
当我在Django中实现oAuth时,文档使我挠头。我发现PHP / Laravel的实现要容易得多...
默认情况下,该行为是创建用户帐户。 Social Auth的用例是,它是一种允许用户自动注册您的应用程序的方法,因此您无需担心管理用户列表。许多具有反社交媒体登录名的网站(包括Stack Exchange)都是这样工作的。您需要覆盖管道
从docs
#如果尚未找到一个用户帐户,请创建一个。 'social_core.pipeline.user.create_user',
#创建将社交帐户与用户相关联的记录。 'social_core.pipeline.social_auth.associate_user',
然后,您需要自行设置用户acl。您必须自己填写用户表(如果有,则填充1:1表),或者如果您要对GSuite域进行填充,则可以将电子邮件域列入白名单。
SOCIAL_AUTH_PIPELINE =( 'social_core.pipeline.social_auth.social_details', 'social_core.pipeline.social_auth.social_uid', 'social_core.pipeline.social_auth.auth_allowed', 'social_core.pipeline.social_auth.social_user', 'social_core.pipeline.social_auth.associate_user', 'social_core.pipeline.social_auth.load_extra_data', 'social_core.pipeline.user.user_details',)
您可以将验证代码放入oAuthCallback函数中,因为这是在通过oAuth进行身份验证后立即重定向用户的位置。如果您不喜欢该用户,则可以在那时进行重定向。或者,您可以中断管道see
或者,您可以使用Social Auth see的白名单功能
注册可以限于由他们的用户标识的一组用户 电子邮件地址或域名。要列入白名单,只需设置以下任意一项 设置:
SOCIAL_AUTH__WHITELISTED_DOMAINS = ['foo.com', 'bar.com'] 提供要列入白名单的域名列表。任何使用者 在任何允许的域上使用电子邮件地址登录 成功,否则引发AuthForbidden。
SOCIAL_AUTH__WHITELISTED_EMAILS = ['me@foo.com', 'you@bar.com']提供要列入白名单的电子邮件地址列表。 此列表中具有电子邮件地址的任何用户都将成功登录, 否则会引发AuthForbidden。