Вывод изображения-аватара пользователя при авторизации 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, чтобы появилась возможность сохранять полученную ссылку на изображение к текущему пользовтаелю?
Как мне вывести/получать доступ в шаблоне к этой переменной/ссылке на изображение?
Буду благодарен за любую помощь
Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
- Соңғы пікірлер
- ИМҚар. 22, 2024, 9:51 Т.Қ.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
- ИМҚаз. 5, 2024, 4:51 Т.Қ.Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
- Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
- Енді форумда талқылаңыз
- fАқп. 15, 2025, 1:46 Т.Қ.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать 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 }}
не совсем понял вопрос, но как вариант - я у себя прверяю в шаблоне, если юзер авторизован через соц. сети то выводим урл, если нет - обычное фото
А какой условие у вк?
я проверяю не конкретно по соц. сети а по бекенду авторизации.То есть, если авторизация обычная или нет (соц. сети). В моём случае:
Какая соц.сеть роли не играет, потому что все-равно получаю урл