当用户通过 Python Social Auth 注册时,他们会在我的数据库中创建为用户,这很好,但我希望在创建用户时将它们添加到某个组中。
怎么做?
当用户通过 Python Social Auth 注册时,他们会在我的数据库中创建为用户,这很好,但我希望在创建用户时将它们添加到某个组中。
怎么做?
我在尝试使用 python-social-auth 在组中添加用户时遇到了同样的问题
错误:“函数”对象没有属性连接
这是我的 myapp.pipeline.py
from django.db.models import signals
from django.dispatch import Signal
from social.pipeline.user import *
from django.contrib.auth.models import User, Group
from social.utils import module_member
def new_users_handler(sender, user, response, details, **kwargs):
user.groups.add(Group.objects.get(name='candidates'))
user_details.connect(new_users_handler, sender=None)
还有我的 app.settings.py
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.social_auth.associate_by_email',
'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',
'companies.pipeline.new_users_handler',
)
因此,为了解决问题,我做了以下事情:
第 1 步:保留 python-social-auth 管道(没有 'companies.pipeline.new_users_handler')
第 2 步:在 settings.py 中添加 SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/social/success/'
第 3 步:为 /social/success/ 添加一个 url
第 4 步:在 views.py 中添加一个函数,例如
@login_required(login_url="/login")
def socialsuccess(request):
defaultgroup = Group.objects.get(name = 'name')
user = request.user
user.groups.add(defaultgroup)
return render(request, 'app/social-success.html')
它工作得很好。但我仍然认为这不是最好的方法。
问候
django-social-auth 上有一个新的用户信号
from social_auth.signals import socialauth_registered
def new_users_handler(sender, user, response, details, **kwargs):
user.groups.add(Group.objects.get(name='mygroup'))
socialauth_registered.connect(new_users_handler, sender=None)
这段代码未经测试(我现在不在我的电脑上),但它应该给你一个想法。
为了:
您需要创建一个文件来保存您的自定义管道(例如 company.social_auth_pipelines.py),然后添加以下函数:
from django.contrib.auth.models import Group
def new_users_handler(backend, user, response, *args, **kwargs):
user.groups.add(Group.objects.get(name='students'))
然后,您需要使用社交核心注册管道,因此在您的 settings.py 中,找到 SOCIAL_AUTH_PIPELINE 条目并将您的管道添加到其中。我在 social_core.pipeline.social_auth.associate_user 下面添加了我的,例如:
...
'social_core.pipeline.social_auth.associate_user',
'company.social_auth_pipelines.new_users_handler',
'social_core.pipeline.social_auth.load_extra_data',
...
对于那些使用 Python Social Auth 并且可能需要将用户添加到某个组的人,这是我使用的代码:
#pipeline.py
from django.contrib.auth.models import Group
def save_to_group(backend, user, response, *args, **kwargs):
defaultgroup = Group.objects.get(name = 'blah')
user.groups.add(defaultgroup)
并将其添加到 SOCIAL_AUTH_PIPELINE
#settings.py
SOCIAL_AUTH_PIPELINE = {
...
'app_name.pipeline.save_to_group'
}