2

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

怎么做?

4

4 回答 4

2

我在尝试使用 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') 

它工作得很好。但我仍然认为这不是最好的方法。

问候

于 2015-05-05T01:03:21.197 回答
1

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)

这段代码未经测试(我现在不在我的电脑上),但它应该给你一个想法。

于 2014-05-05T22:12:28.160 回答
1

为了:

  • social_auth_core:4.0.3
  • social_auth_app_django:4.0.0

您需要创建一个文件来保存您的自定义管道(例如 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',
...
于 2021-03-16T12:20:10.690 回答
0

对于那些使用 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'
}
于 2016-09-23T14:21:48.637 回答