将通过Python Social Auth登录的用户添加到组中

将通过Python Social Auth登录的用户添加到组中,python,django,django-socialauth,python-social-auth,Python,Django,Django Socialauth,Python Social Auth,当用户通过Python Social Auth注册时,他们会在我的数据库中被创建为用户,这很好,但我希望在用户创建时将他们添加到某个组中 如何做到这一点?django social auth上有一个新的用户信号 from social_auth.signals import socialauth_registered def new_users_handler(sender, user, response, details, **kwargs): user.groups.add(Gro

当用户通过Python Social Auth注册时,他们会在我的数据库中被创建为用户,这很好,但我希望在用户创建时将他们添加到某个组中


如何做到这一点?

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)

这段代码没有经过测试(我现在不在我的计算机上),但它应该会给你一个想法。

我在尝试使用python 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)
错误:“函数”对象没有属性连接

这是我的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社交身份验证管道(没有“companys.pipeline.new\u users\u handler”)

第2步:在settings.py中添加了社交\u AUTH\u NEW\u USER\u REDIRECT\u 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') 
它很好用。但我仍然认为这不是最好的办法


对于那些正在使用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_管道中

#settings.py
SOCIAL_AUTH_PIPELINE = {
  ...
  'app_name.pipeline.save_to_group'
}
用于:

  • 社会认证核心:4.0.3
  • 社交应用程序:4.0.0
您需要创建一个文件来保存自定义管道(例如company.social\u auth\u 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'))
然后需要向social core注册管道,因此在settings.py中,找到social_AUTH_管道条目并将管道添加到其中。我在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,而不是django social auth,那么信号的确切位置在哪里?好的,我假设这是因为您使用的是django social auth标记,很抱歉,django social auth的信号已被弃用,请参见: