Evgenii Legotckoi
Evgenii Legotckoi13 липня 2018 р. 03:17

Django - Підручник 036. Як додати аутентифікацію через соціальні мережі. ВКонтакте

За рекомендацією користувачів сайту, почав додавати авторизацію через соціальні мережі на сайт. Першою такою соціальною мережею стала ВКонтакте як найбільш популярна соціальна мережа у користувачів мого сайту.

Django сам по собі має необхідний функціонал роботи з протоколом OAuth 2.0, який міг використовується в API ВКонтакте для авторизації користувачів на сторонніх ресурсах (і не тільки для авторизації). Але в даному випадку я не став писати свій велосипед, використовуючи голу підтримку OAuth в Django, а знайшов дуже хорошу батарейку, яка, мабуть, досить відома серед розробників сайтів на Django, яка дозволила впровадити авторизацію через ВКонтакте всього за пару годин.

Ця батарея називається Python Social Auth Django .

Давайте крок за кроком розберемося, що нам потрібно зробити, щоб підключити авторизацію через ВКонтакте на сайт з Django


Крок 1 - Установка Python Social Auth Django

Робиться це однією командою у вашому віртуальному оточенні через утиліту.

pip install social-auth-app-django

У документації пропонується при конфігуруванні два варіанти ORM для роботи системи аутентифікації через соціальні мережі. Це класична ОРМ Django та ОРМ MongoEngine, але так вийшло, що необхідний для MongoEngine пакет застарів і трохи несумісний з останніми версіями Django, просто не працює, навіть у документації розробників mongoengine висить заклик допомоги з підтримкою утиліти. Тому налаштовуватимемо тільки для класичної ОРМ.

Крок 2 - Реєстрація батарейки на вашому сайті

Прописуємо програму аутентифікації в INSTALLED_APPS

INSTALLED_APPS = (
    ...
    'social_django',
    ...
)

Крок 3 - Міграція бази даних

Вам потрібно буде застосувати зміни в структурі бази даних, оскільки батарея має свої таблиці для роботи з авторизацією користувачів.

./manage.py migrate

Далі наслідуємо ще одну рекомендацію з налаштування бази даних, якщо Ви, як і я, використовуєте PostgreSQL. А саме...

При використанні PostgreSQL рекомендується використовувати вбудоване поле JSONB для зберігання додаткових_даних. Щоб увімкнути його, задайте налаштування:

SOCIAL_AUTH_POSTGRES_JSONFIELD = True

Крок 4 - Налаштування бекендів аутентифікації

Також прописуємо у settings.py

AUTHENTICATION_BACKENDS = (
    'social_core.backends.vk.VKOAuth2',          # бекенд авторизации через ВКонтакте
    'django.contrib.auth.backends.ModelBackend', # бекенд классической аутентификации, чтобы работала авторизация через обычный логин и пароль
)

Обов'язково увімкніть бекенд класичної автентифікації, інакше втратите можливість зайти через логін та пароль на сайт.

Крок 5 - Налаштування процесора шаблонів

У мене за півтора роки розробки даного сайту налаштування TEMPLATES залишилося практично недоторканим, але я додав один рядок для цієї батареї

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'social_django.context_processors.backends', # Добавил эту строку
            ],
        },
    },
]

Крок 6 - Налаштування ключів для ВКонтакті

Тут дана настройка секретних ключів для ВКонтакті

SOCIAL_AUTH_VK_OAUTH2_KEY = 'XXXXXXX'
SOCIAL_AUTH_VK_OAUTH2_SECRET = 'XXXXXXXXXXXXXXXXXXXX'

Щоб їх отримати, потрібно створити в інструментарії розробника ВКонтакте додаток та взяти ID вашої програми та секретний ключ для нього.

Зареєструйте додаток

Заходимо в його налаштування і бачимо все, що потрібно

У результаті прописуємо в дані змінні наступні налаштування

SOCIAL_AUTH_VK_OAUTH2_KEY = 'ID приложения'
SOCIAL_AUTH_VK_OAUTH2_SECRET = 'Защищённый ключ'

Крок 7 - Підключення маршрутів для авторизації в urls.py

Робиться це так

urlpatterns = [
    ...
    path('', include('social_django.urls')),
]

Крок 8 - Додавання посилання на маршрут

А тепер додамо посилання на маршрут десь у шаблоні, щоб запускати авторизацію через ВКонтакті

<a href="/login/vk-oauth2"><img src="/static/lvk.png" class="avatar-3" data-toggle="tooltip" title="{% trans 'Login via VKontakte' %}"></a>

Крок 9 - Налаштування редиректу під час авторизації

Це необов'язкове налаштування, яке вкаже URL для перенаправлення користувача на вашу сторінку після успішної авторизації. Залишимо корінь сайту

LOGIN_REDIRECT_URL = '/'

Там уже розберетеся, як вам краще зробити

Крок 10 - Запит дозволів на отримання доступу до електронної пошти

У мене на сайті використовується своя система розсилки повідомлень повідомлень поштою, тому мені важливо мати доступ до email користувача, щоб повідомляти його про нові події на ресурсі, тому додамо запит на отримання доступу до email.

SOCIAL_AUTH_VK_OAUTH2_SCOPE = ['email']

Для Django рекомендую VDS-хостинг TIMEWEB

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

bernar92
  • 14 липня 2018 р. 00:17

Мне интересно что будет если в обеих сетях в авторизации одинаковый еmail. Не выведет ли ошибку ?

Evgenii Legotckoi
  • 14 липня 2018 р. 14:35

Не, не будет, в данной батарейке уже есть необходимый функционал по разрулированию этой проблемы. Аутентификации из разных социальных сетей будут сливаться на один аккаунт. Так что всё нормально должно быть.

В следующей статье будет описан этот момент. Опубликую статью в понедельник.
bernar92
  • 07 серпня 2018 р. 00:10

интересно можно ли через эту батарейку получить данные на данные в вк(друзья, фото итд)

Evgenii Legotckoi
  • 07 серпня 2018 р. 02:48

Там можно запросить доступ к тому или иному функционалу, а вот полное использование API, как я понимаю, потребует либо дописывания функционала, или использование ещё каких-нибудь батареек

Misha Lebedev
  • 14 січня 2019 р. 00:32

Нашёл ошибку в вашем примере

Evgenii Legotckoi
  • 14 січня 2019 р. 02:57

какая именно? написали бы сразу ))

ИИ
  • 28 березня 2019 р. 08:44

Здравствуйте, у меня такая проблема: https://ibb.co/D1Y4L7g

Не могли бы вы помочь

Evgenii Legotckoi
  • 28 березня 2019 р. 14:07

index/ на конце url лишний у вас.

ИИ
  • 28 березня 2019 р. 17:08

А для insta какую ссылку вставить? 'social:begin' instagram, instagram-oauth2 - не работают

Evgenii Legotckoi
  • 29 березня 2019 р. 08:31

Вы ключи-то для инстаграмма настроили?

Add instagram backend to AUTHENTICATION_SETTINGS:

AUTHENTICATION_SETTINGS = (
  ...
  'social_core.backends.instagram.InstagramOAuth2',
  ...
)

fill Client Id and Client Secret values in the settings:

SOCIAL_AUTH_INSTAGRAM_KEY = ''
SOCIAL_AUTH_INSTAGRAM_SECRET = ''

extra scopes can be defined by using:

SOCIAL_AUTH_INSTAGRAM_AUTH_EXTRA_ARGUMENTS = {'scope': 'likes comments relationships'}
ИИ
  • 29 березня 2019 р. 11:00

Да это все я прописал и только это я и нашел в сети, я хотел узнать название ссылки

Evgenii Legotckoi
  • 29 березня 2019 р. 11:16
  • (відредаговано)

Ну из того, что я нашёл в документации и в исходниках модуля, следует, что всё-таки instagram. То есть правильно писать так

{% url 'social:begin' 'instagram' %}

Если не работает, то причина скорее в чём-то другом. Данный url рендерится у вас на странице например?

ИИ
  • 29 березня 2019 р. 11:40

http://localhost:8000/account/login/login/instagram/
No module named 'Social_core' Вот что пишет, а остальные работают в этом плане

Evgenii Legotckoi
  • 29 березня 2019 р. 17:01
  • (відредаговано)

Покажите, что у вас записано в бэкендах

AUTHENTICATION_BACKENDS = (
    'social_core.backends.vk.VKOAuth2',        
    'django.contrib.auth.backends.ModelBackend',
)

Дело в том, что есть django-social-auth, а есть python-social-auth. Одно - это форк другого. Это одно и тоже по сути, только один вообще для всего, а второй специально для django заточен, но есть некоторые отличия у них, например в путях.

ИИ
  • 29 березня 2019 р. 17:26
AUTHENTICATION_BACKENDS = (
    'social_core.backends.vk.VKOAuth2',          
    'django.contrib.auth.backends.ModelBackend', 
    'social_core.backends.facebook.FacebookOAuth2',
    'Social_core.backends.instagram.InstagramOAuth2',
)
Evgenii Legotckoi
  • 29 березня 2019 р. 17:41

Насколько помню, Джанговский бэкенд для аутентификации должен быть самым последним в этом списке

AUTHENTICATION_BACKENDS = (
    'social_core.backends.vk.VKOAuth2',  
    'social_core.backends.facebook.FacebookOAuth2',
    'Social_core.backends.instagram.InstagramOAuth2',
    'django.contrib.auth.backends.ModelBackend', 
)
ИИ
  • 29 березня 2019 р. 18:03

У меня, честно говоря, с этим были проблемы я пока отключил его. Не могу зайти через обычные логин и пароль, выдает No module named 'Social_core'. Но и после этого также, также остается проблема с инстаграм

VP
  • 30 березня 2019 р. 21:55

Интересно, но вот никак не могу разобраться, как можно получить список хотя бы имён друзей пользователя?

Evgenii Legotckoi
  • 04 квітня 2019 р. 15:35

Честно, этим не занимался, но для этого нужно добавлять дополнительные запросы на разрешение к доступу к списку друзей и т.д. Рекомендую вам обратиться к документации самого ВКонтакте.

m
  • 29 вересня 2019 р. 07:39

Добрый день! Подскажите, пожалуйста, какие урлы для вк предоставляет эта батарейка? Не совсем понимаю,какой запрос мне надо отправить, чтобы авторизоваться и так далее...

Evgenii Legotckoi
  • 29 вересня 2019 р. 08:14

Добрый день.
В данном примере все url подключаются в корень сайта.

urlpatterns = [
    ...
    path('', include('social_django.urls')),
]

Соответственно сразу для попытки логина нужно лишь написать следующий url /login/vk-oauth2

Остальные редиректы и прочее работает автоматически. Заводится с пол пинка. Если очень интересно, какие маршруты формируются, то в режиме дебага откройте несуществующую страницу, чтобы вызвать ошибку 404 и посмотрите там, какие url добавились.

url формируются в зависимости от того, где у вас подключаются маршруту данной батарейки в вашем сайте. Поэтому их начальная часть может выглядеть как угодно, чего я точно в вашем проекте знать не могу.

m
  • 29 вересня 2019 р. 08:56

Спасибо за оперативный ответ!
Я сейчас разрабатываю приложение на андроид и параллельно пытаюсь писать сервер на джанго, поэтому запуталась, как к чему подключаться
Я правильно понимаю, что после успешной авторизации клиент должен отправить на сервер полученный токен и свой айди? И если да, то по какому адресу он должен это сделать?

Evgenii Legotckoi
  • 30 вересня 2019 р. 03:33

Если честно то с авторизацией в мобильном приложении я не работал. Знаю, что для таких вещей используют батарейку Django Rest Framework, с помощью которого можно получить токена для самого сайта, чтобы идентифицировать пользователя приложения, и через него всё ходит. Но подробный процесс я не знаю, мобильными приложениями в этом ключе совсем не занимался.

КК
  • 15 жовтня 2019 р. 08:55

Привет!!! Вопрос такой. Чтобы включить PostgreSQL, задайте настройку: SOCIAL_AUTH_POSTGRES_JSONFIELD = True. Сам вопрос: Где именно прописать или включить эту строчку???

КК
  • 15 жовтня 2019 р. 08:57

Шаг 6 - Настройка ключей для ВКонтакте Где прописать вот эти строки SOCIAL_AUTH_VK_OAUTH2_KEY = 'XXXXXXX'
SOCIAL_AUTH_VK_OAUTH2_SECRET = 'XXXXXXXXXXXXXXXXXXXX'
Я так понимаю в в settings.py ???

КК
  • 15 жовтня 2019 р. 09:00
  • (відредаговано)

Шаг 8 - Добавление ссылки на маршрут
А теперь добавим ссылочку на маршрут где-нибудь в шаблоне, чтобы запускать авторизацию через ВКонтакте ---- (

<a href="/login/vk-oauth2"><img src="/static/lvk.png" class="avatar-3" data-toggle="tooltip" title="{% trans 'Login via VKontakte' %}"></a>

) В шаблоне самого сайта прописать это или страницы с аутентификацией ???

Evgenii Legotckoi
  • 15 жовтня 2019 р. 09:09

Добрый день.

1) В settings.py
2) Да, в settings.py
3) Где хотите, можете где-то в шаблоне, если вам нужна авторизация с любой страницы, либо только на странице аутентификации.

КК
  • 15 жовтня 2019 р. 19:52

Спасибо!!! Буду пробовать)

КК
  • 15 жовтня 2019 р. 20:22

После написания строчки SOCIAL_AUTH_POSTGRES_JSONFIELD = True появляется ошибка при создании локального сервера. from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange
ModuleNotFoundError: No module named 'psycopg2'

КК
  • 15 жовтня 2019 р. 20:24

Можно вообще проверить работоспособность на локальном джанго сервере?

Evgenii Legotckoi
  • 16 жовтня 2019 р. 04:42

Я так понимаю, вы используете пока на development машине SQLite базу данных, иначе у вас не возникло бы ни ошибки, ни вопросов по поводу этой ошибки.

Пакет устанавливается так

sudo pip install psycopg2 

Но для его использования и вообще использования данного функционала вам нужна база данных PostgreSQL, так что поднимайте на локальной машине базу данных.

Вот статья по развёртыванию Django с PostgreSQL , на локальной машине вам из той статьи будет самым интересным разделы с базой данных.

Что касается тестирования на локальной машине, то скорее всего нет. Поскольку VK должен делать правильный редирект и локальный сервер должен отвечать на внешний запрос. Полагаю, что у вас нет статического IP и редиректа до локального сервера. Так что проверить это можно в данном случае только на боевом сервере.

КК
  • 16 жовтня 2019 р. 07:39

А тут можно ссылки на сторонний ресурс показывать? Нашёл на habr похожую статью, только там чуток отличается код и про локальный сервер написано, нужно чтоб кто то понимающий посмотрел и своё мнение высказал.

Evgenii Legotckoi
  • 16 жовтня 2019 р. 07:45

Если это не чистой воды спам, а по делу, то без проблем. Но в таком случае лучше создавайте отдельный вопрос на форуме . При создании вопроса есть поле, в котором можно указать статью, которая опубликована здесь, а в тексте вопроса уже ссылку на статью и развёрнутый вопрос, что вам там не ясно.

АМ
  • 25 жовтня 2019 р. 07:33

{"error":"invalid_request","error_description":"redirect_uri has wrong domain, check application settings"} выводит такую ошибку

Evgenii Legotckoi
  • 25 жовтня 2019 р. 07:54

А что в настройках вашего приложения?
В ошибке написано, что у вас неправильные настройки домена и написано проверить настройки приложения.

A.
  • 06 листопада 2019 р. 23:41

Читаю документацию по python-social-auth, пытаюсь понять как сохранить access_token в отдельном поле пользователя, чтобы потом иметь доступ к нему. Кто-нибудь знает как это сделать?) (access_token сохраняется после логина в поле extra_data)

Yk
  • 27 листопада 2019 р. 08:03
  • (відредаговано)
<a href="/login/vk-oauth2"><img src="/static/lvk.png" class="avatar-3" data-toggle="tooltip" title="{% trans 'Login via VKontakte' %}"></a>

Выкидывает исключение в шаблоне: Invalid block tag on line 16: 'trans'. Did you forget to register or load this tag?
Новичок, поэтому не понимаю, что здесь происходит. Если это получится исправить, то как затем реализовать log out со страницы?

Evgenii Legotckoi
  • 27 листопада 2019 р. 08:09

Не подключили в шаблоне тег локализации

{% load trans from i18n %}

log out делается через url logout`а

views.py

@login_required
def logout(request):
    auth.logout(request)
    return redirect(get_next_url(request))

urls.py

# -*- coding: utf-8 -*-

from django.urls import path

from accounts import views

app_name = 'accounts'
urlpatterns = [
    # Другие url
    path('logout/', views.logout, name='logout'),
    # Другие url
]
Yk
  • 27 листопада 2019 р. 08:34
  • (відредаговано)

Когда мы нажимаем на картинку, нас должно перенаправить на окно ввода для аутентификации. Но так как ничего не происходило, добавил шаблон и прикрутил что-то подобное, ожидая чуда, увы. Page not found

def login(request):
    auth.login(request)
    return render(request, "index.html")


path('login/', views.login, name='login'),

UPD: Вообщем, программирование не мое, впустую потраченные нервы

progammist
  • 12 квітня 2020 р. 09:53
  • (відредаговано)

Есть профиль пользователя, в нем вывожу image, username, email.

Ребята и админ, подскажите пж как добавить(обновлять) image в профиль при авторизации в вк:
Uername,email при авторизации получает отлично, а вот как image обновлять - не получается.

Модель User (model.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)

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

В шаблоне фото профиля вывожу:

 <img class="" src="{{ user.profile.image.url }}" >
Evgenii Legotckoi
  • 13 квітня 2020 р. 08:47

Тут скорее вопрос в том, чтобы правильно настроить бэкенд авторизации, а не к самой модели данных профиля.

progammist
  • 13 квітня 2020 р. 09:09
  • (відредаговано)

Вы на своей практике выводили img от пользователя при авторизии через соц. сеть?) мнеб пример хоть посмотреть

Evgenii Legotckoi
  • 13 квітня 2020 р. 09:13

Честно, не доводилось )))
Мысли были, но нет. Но вообще, там нужно запрашивать права доступа на изображение через OAuth, по идее фотография туда же относится. Для этого нужно настраивать соответственно бэкенд аутентификации. Также нужно правильная обработка запрос изображения.
Полагаю, что его копировать нужно будет с социальной сети на сайт.
Если заморочусь с этим, то пожалуй, напишу статью

progammist
  • 13 квітня 2020 р. 11:45

Будет интересно, потому что на просторах рунета нет такой статьи

progammist
  • 23 квітня 2020 р. 12:01
  • (відредаговано)

Подскажите пожалуйста, сделал функцию (функция не входит в class Profile, просто отдельная):

models.py #путь users/models.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)

Функция получает url адрес изображения при авторизации. Выводит в консоль url. Пример URL:

https://sun9-12.userapi.com/c852132/v852132234/118b6c/aB0GoDEWzaw.jpg

Работает. НО!

Как мне получить/вывести это в шаблоне???

<img src="{{user.avatar}}">

почему-то не работает. Модели user.avatar у меня нет. Может быть в синтаксесе ошибся? Нид хелп

Evgenii Legotckoi
  • 24 квітня 2020 р. 02:51

Наверное, было бы лучше, если бы вы создали отдельное обсуждение на форуме )))
Но у меня вот вопрос, а вы как-то модифицировали саму модель пользователя? Просто у вас есть модель профиля, но кода модели пользователя я не вижу.
А поля avatar в модели пользователя не существует. Так что метод save ничего не сохраняет, по крайней мере в рамках того, что я увидел в вашем коде.

progammist
  • 24 квітня 2020 р. 05:46
  • (відредаговано)

Никак не модифицировал, есть только class Profile
Может быть можно как-то добавить поле avatar к классу profile?
Как создать модель пользователя? Может быть можно изменить функцию, которая будет обновлять profile, с полем avatar
Короче я запутался)
Создал обсуждение: https://evileg.com/ru/forum/topic/1321/

Evgenii Legotckoi
  • 24 квітня 2020 р. 05:49

Понятно. После работы отпишусь в том обсуждении. У меня модель пользователя переопределена.
Но можете добавить avtar и модели profile, у меня изначально много было сделано через profile, но в связи с выводом части кода в open source я перешёл на переопределение модели пользователя.

progammist
  • 24 квітня 2020 р. 06:02
  • (відредаговано)

Ок, ответил в том обсуждении, добавил поле avatar в Profile, теперь не знаю как это в функции отобразить)

У меня модель пользователя переопределена.

А в чем заключается преимущество её переопределении, зачем её переопределять?

Evgenii Legotckoi
  • 24 квітня 2020 р. 07:40

Удобство, организация структуры базы данных. Мне лично проще добавить некоторые методы в модель User, чтобы напрямую их вызывать в шаблонах, чем городить огород из шаблонных тегов.

progammist
  • 24 квітня 2020 р. 11:28

Как будет время, можете показать пример как можно предопределить модель User?)

Evgenii Legotckoi
  • 26 квітня 2020 р. 15:09

Можете почитать об этом в этой статье Django - Урок 052. Переопределение модели пользователя

МА
  • 12 травня 2020 р. 11:48

Выскочила ошибка при клике на регистрацию:

TypeError at /complete/vk-oauth2/
from_db_value() missing 1 required positional argument: 'context'

шаблон:

{% block content %}
<a href="/login/vk-oauth2">Войти через Вконтакте</a>
{% endblock content %}
МА
  • 12 травня 2020 р. 11:55

Сори забыл включить виртуальное окружение)

АЛ
  • 29 травня 2020 р. 06:24
  • (відредаговано)

Здравствуйте! После клика на ссылку авторизации выдает json словарь с ошибкой:

{"error":"invalid_request","error_description":"redirect_uri is incorrect, check application redirect uri in the settings page"}

где искать ошибку?

Неправильно прописали URL, на который возвращается ответ от OAuth ВКонтакте.
Настраивайте ваше приложение в консоли разработчика ВКонтакте

YE
  • 04 листопада 2020 р. 06:55

Евгений, а данныя батарейка поддерживает возможность, привязать ВК и т.д. уже после прохождения регистрации?

ДТ
  • 04 листопада 2020 р. 10:21

Возможно, автор прочитает. Делал авторизацию с помощью ВК по книге Дронова. Выдает ошибку "Backend not found". Стал гуглить, нашел вашу статью, вроде почти то же самое (оно и понятно, документация-то одна и та же), но есть и отличия. Поправил как у вас, всё равно не работает.
Понимаю, что это либо что-то с бекендами, либо с urls.py.
У меня вот так:

AUTHENTICAL_BACKENDS = (
    'social_core.backends.vk.VKOAuth2',
    'django.contrib.auth.backends.ModelBackend',

)
'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'social_django.context_processors.login_redirect',
                'social_django.context_processors.backends',
            ],
        },
path('social/', include('social_django.urls', namespace='social'))

Вопрос 1, дурацкий)) Почему не работает?
Вопрос 2. У вас urls уровня приложения или проекта? У меня не работает ни так, ни так.

Evgenii Legotckoi
  • 28 січня 2021 р. 04:29

Если email совпадает с тем, что в ВК, то автоматически привязывает. Если нет, то создаёт новый аккаунт.

Evgenii Legotckoi
  • 28 січня 2021 р. 04:34

У меня urls на уровне приложения и записаны сейчас так

path('', include('social_django.urls')),
A
  • 28 квітня 2021 р. 01:25
  • (відредаговано)

после того как дам разрешение для просмотра моего емайл, вот такая ошибка:
AuthForbidden at /social-auth/complete/vk-oauth2/
Your credentials aren't allowed

Вот сетингс:
SOCIAL_AUTH_VK_OAUTH2_KEY = 'блабла'
SOCIAL_AUTH_VK_OAUTH2_SECRET = 'кей и сикрет точно введены'
SOCIAL_AUTH_VK_OAUTH2_SCOPE = ['email']
LOGIN_REDIRECT_URL = '/'

Evgenii Legotckoi
  • 02 липня 2021 р. 05:09

Может быть домен не разрешен в самом приложении. Иногда бывает случайно происходит и пропадает через некоторое время - какие-то неполадки со стороны соц сетей

AF
  • 29 жовтня 2021 р. 09:44

Евгение не знаете как исправить ошибку при авторизации через вк пишет Invalid request: versions below 5.81 are deprecated. Version param should be passed as "v".

q
  • 20 грудня 2021 р. 06:08

Добавь в setting.py строку: SOCIAL_AUTH_VK_OAUTH2_API_VERSION = '5.81'

ВБ
  • 24 січня 2022 р. 11:37
  • (відредаговано)

Доброго времени суток, вроде все прописал, подключил, но после того как нажал кнопочку "Разрешить" при редиректе выпадает вот что :
ModuleNotFoundError at /complete/vk-oauth2/
No module named 'social'
Исключение возникает здесь :venv/lib/python3.8/site-packages/social_core/utils.py, line 52, in import_module

Подскажите как исправить. Заранее спасибо.

DC
  • 05 травня 2022 р. 06:01

Получаю ошибку:

InvalidURL at /complete/vk-oauth2/
Failed to parse: https://oauth.vk.com/access_token
Request Method: GET
Request URL: http:// /complete/vk-oauth2/?redirect_state= &state=
Django Version: 4.0.4
Exception Type: InvalidURL
Exception Value:
Failed to parse: https://oauth.vk.com/access_token
Exception Location: /usr/local/lib/python3.8/dist-packages/requests/models.py, line 384, in prepare_url
Python Executable: /usr/bin/python3
Python Version: 3.8.10
Python Path:
['/root/web',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'/root/.local/lib/python3.8/site-packages',
'/usr/local/lib/python3.8/dist-packages',
'/usr/lib/python3/dist-packages']
Server time: Thu, 05 May 2022 09:57:44 +0000

и совершенно не понимаю, в чём может быть проблема

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84бали,
  • Рейтинг балів4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42бали,
  • Рейтинг балів-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47бали,
  • Рейтинг балів-6
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 11:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 08:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 07:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 11:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Дмитрий
Дмитрий03 лютого 2025 р. 06:24
Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
NW
Nayo Wai30 січня 2025 р. 09:22
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
n
nkly03 січня 2025 р. 02:52
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
M
Marsel16 серпня 2023 р. 14:26
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 15:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.

Слідкуйте за нами в соціальних мережах