1

Python Social Auth 中的默认用户名生成方案是采用经过身份验证的社交网络的用户名,如果已经采用,则为其添加一些随机值(或者它是一个哈希?)。

无论如何,我想改变这种行为,我想定义我自己的用户名生成方法。例如用户名+提供者+随机。

想法?

4

1 回答 1

7

您只需将social.pipeline.user.get_usernameSOCIAL_AUTH_PIPELINE 替换为您自己的函数的路径,返回生成的用户名。

例如:

项目/myapp/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',
    'project.myapp.utils.get_username',
    'social.pipeline.social_auth.associate_by_email',
    'social.pipeline.user.create_user',
    'social.pipeline.social_auth.associate_user',
    'social.pipeline.social_auth.load_extra_data',
    'social.pipeline.user.user_details',
)

项目/myapp/utils.py:

from social.pipeline.user import get_username as social_get_username
from random import randrange

def get_username(strategy, details, user=None, *args, **kwargs):
    result = social_get_username(strategy, details, user=user, *args, **kwargs)
    result['username'] = '-'.join([
        result['username'], strategy.backend.name, str(randrange(0, 1000))
    ])
    return result

在上面的函数中,我get_username从模块调用默认方法python-social-auth,结果附加提供者名称和 0 到 1000 之间的随机数。

您可以在 GitHub 上查看 social.pipeline.user.get_username 的源代码

于 2014-04-27T22:31:04.297 回答