Настройка имени пользователя в Steam аутентификация OpenID с помощью Django Allauth - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь настроить новое приложение django для использования аутентификации OpenID в Steam.

Проблема, с которой я сталкиваюсь, заключается в том, что при входе нового пользователя (нет формы, позволяющей ему настраивать его) имя пользователя / указать адрес электронной почты) что-то (либо allauth, либо django .contrib.auth) по умолчанию использует имя пользователя своего объекта пользователя user. Это поле уникально ... поэтому второй пользователь не может войти в систему. Я не могу понять, что / где новый объект пользователя создан, чтобы мы могли настроить это поле. Мы хотим, чтобы он в идеале извлекал данные из extra_data ['personaname']).

Я проследил его где-то между allauth.socialaccount.adapter.populate_user и allauth.account.utils.user_username.

Заполняется пользователь вызывается только один раз и печать locals() там показывает <User: Steam Username>. но имя_пользователя вызывается пять раз, и первое - Steam Username, а последнее - user.

1 Ответ

0 голосов
/ 27 февраля 2020

Закончилось создание моей собственной модели User, которая решает эту проблему.

from django.contrib.auth.models import PermissionsMixin
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _

class Player(PermissionsMixin):
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now, editable=False)
    last_login = models.DateTimeField(_('last login'), blank=True, null=True, editable=False)
    username = models.CharField(_('username'), max_length=128, unique=True)

    REQUIRED_FIELDS=()
    USERNAME_FIELD='username'

    is_active = True

    @property
    def is_anonymous(self):
         return False

    @property
    def is_authenticated(self):
         return True

    @property
    def is_staff(self):
         return self.is_superuser

    @property
    def steam_id(self):
         return self.steam_account.uid

    @property
    def steam_account(self):
         return self.socialaccount_set.get(provider='steam')

    def set_unusable_password(self):
         """
         This only exists for allauth.
         """
         pass

    def __str__(self):
        return self.username
from django.contrib import admin
from django.utils.translation import gettext_lazy as _

from .models import Player

@admin.register(Player)
class PlayerAdmin(admin.ModelAdmin):
    readonly_fields=('last_login','date_joined')
    fieldsets = (
        (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
        (_('Permissions'), {'fields': ('is_superuser', 'groups', 'user_permissions')}),
    )
    list_display = ('username', 'steam_id', 'is_superuser', 'date_joined', 'last_login', 'steam_id')
    list_filter = ('is_superuser', 'groups')
    ordering = ('username','last_login', 'date_joined')
    filter_horizontal = ('groups', 'user_permissions',)
...