Вывод изображения-аватара пользователя при авторизации VK (Social Auth Django)
И так, появилась задача - выводить аватар пользователя при авторизации через соц. сети. Что в данный момент:
• Настроил авторизацию по гайду
Как добавить аутентификацию через социальные сети. ВКонтакте
• Авторизация пользователя проходит успешно
• Добавляем настройку SOCIAL_AUTH_PIPELINE в
settings.py
• Добавил функцию (отдельно) которая получает ссылку аватарки при авторизации:
settings.py
- SOCIAL_AUTH_PIPELINE = (
- 'social_core.pipeline.social_auth.social_details',
- 'social_core.pipeline.social_auth.social_uid',
- 'social_core.pipeline.social_auth.auth_allowed',
- 'social_core.pipeline.social_auth.social_user',
- 'social_core.pipeline.user.get_username',
- 'social_core.pipeline.user.create_user',
- 'social_core.pipeline.social_auth.associate_user',
- 'social_core.pipeline.social_auth.load_extra_data',
- 'social_core.pipeline.user.user_details',
- 'blog.pipeline.get_avatar', #Указываем путь, где лежит функция получения аватара.
- )
pipeline.py
- def get_avatar(backend, response, user=None, *args, **kwargs):
- url = None
- if backend.name == 'vk-oauth2':
- url = response.get('photo', '')
- if url:
- user.avatar = url
- user.save()
- print (user.avatar)
В консоле получаем ссылку на изображение пользователя, который проходит авторизацию/аутентификацию:
- https://sun9-2.userapi.com/c857628/v857628128/1e4d00/9v4lVL5AESM.jpg
Картинку получили. Собсна в чем пробелмы:
Не могу вывести в шаблон результат этой функции. Модификации User нет, есть только Profile:
models.py
- class Profile(models.Model):
- user = models.OneToOneField(User, on_delete=models.CASCADE)
- image = models.ImageField(default='default.jpg', upload_to='profile_pics',)
- def __str__(self):
- return f'{self.user.username} Profile'
- def save(self, *args, **kwargs):
- super(Profile, self).save(*args, **kwargs)
Вопросы:
Как мне расширить модель User, чтобы появилась возможность сохранять полученную ссылку на изображение к текущему пользовтаелю?
Как мне вывести/получать доступ в шаблоне к этой переменной/ссылке на изображение?
Буду благодарен за любую помощь
Do you like it? Share on social networks!
- Last comments
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
- Now discuss on the forum
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Попробовал в модели Profile добавить поле avatar:
Как мне изменить соответственно функцию?
Пока я ещё не вернулся домой, и не посмотрел переопределение модели User, вопрос в догонку. В каком месте кода вызываете метод get_avatar ?
А так, раз уж вы в Profile залили avatar поле, то ту функцию я бы переписал так
Ну и в шаблоне попробуйте вызывать так
Функция get_avatar указывается в settings.py в настройке SOCIAL_AUTH_PIPELINE () . Насколько я понимаю, таким образом мы указываем пользовательскую обработку в конце обработки аутентификации. Добавил более подробно в описание вопроса.
Вам большое спасибо за помощь - всё работает!
А не подскажите, как реализовать тоже самое только allauth? User переопределена, имеется avatar загрузка.
Снова вернусь в эту тему. В общем как-то раз я сделал всё, что написано выше рабочим на сайте при авторизации юзера через вк.
Но вот буквально сегодня решил повторить, словил неудачу. Вот в таком виде:
Зачем создается такой путь? Юзер абстрактный, но есть ещё вот такая фича:
Без неё картинка работает. Но опять же, только через {{ user.avatar }}, а простые (загруженные) авки не работает как надо. Т.е они работают только с {{ user.avatar.url }}
не совсем понял вопрос, но как вариант - я у себя прверяю в шаблоне, если юзер авторизован через соц. сети то выводим урл, если нет - обычное фото
А какой условие у вк?
я проверяю не конкретно по соц. сети а по бекенду авторизации.То есть, если авторизация обычная или нет (соц. сети). В моём случае:
Какая соц.сеть роли не играет, потому что все-равно получаю урл