Evgenii Legotckoi
Evgenii LegotckoiШілде 13, 2018, 3:17 Т.Ж.

Джанго - Сабақ 036. Әлеуметтік желілер арқылы аутентификацияны қалай қосуға болады. Байланыста

Сайт пайдаланушыларының ұсынысы бойынша мен сайтқа әлеуметтік желілер арқылы авторизацияны қоса бастадым. Мұндай алғашқы әлеуметтік желі ВКонтакте болды, ол менің сайтымның пайдаланушылары арасында ең танымал әлеуметтік желі.

Django-ның өзінде OAuth 2.0 протоколымен жұмыс істеу үшін қажетті функционалдылық бар, оны VKontakte API интерфейсінде үшінші тарап ресурстарында пайдаланушыларды авторизациялау үшін пайдалануға болады (тек авторизация үшін ғана емес). Бірақ бұл жағдайда мен велосипедімді Django-да жалаңаш OAuth қолдауын пайдаланып жазбадым, бірақ өте жақсы аккумулятор таптым, ол Django сайтының әзірлеушілері арасында өте жақсы белгілі, бұл маған ВКонтакте арқылы авторизацияны бірнеше рет жүзеге асыруға мүмкіндік берді. сағаттар.

Бұл батарея Python Social Auth Django деп аталады.

ВКонтакте арқылы авторизацияны Django сайтына қосу үшін не істеу керектігін кезең-кезеңімен қарастырайық.


1-қадам — Python Social Auth Django орнату

Бұл пип утилитасы арқылы виртуалды ортадағы бір пәрменмен орындалады.

pip install social-auth-app-django

Құжаттама әлеуметтік желілер арқылы аутентификация жүйесін конфигурациялауға арналған екі ORM опциясын ұсынады. Бұл классикалық Django ORM және MongoEngine ORM, бірақ MongoEngine үшін қажет пакет ескірген және Django-ның соңғы нұсқаларымен шамалы үйлеспейді, ол жай ғана жұмыс істемейді, тіпті mongoengine әзірлеушілерінің құжаттамасы көмекке қоңырау шалып тұрады. утилитаға қолдау көрсету. Сондықтан біз тек классикалық ORM үшін конфигурациялаймыз.

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 = [
    {
        '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'

Оларды алу үшін сізге «ВКонтакте» әзірлеушісінің құралдар жинағында қосымша жасау керек және ол үшін қолданба идентификаторы мен құпия кілтті алу керек.

Тіркелетін өтініш

Біз оның параметрлеріне кіріп, сізге қажет нәрсені көреміз

Нәтижесінде біз осы айнымалыларда келесі параметрлерді белгілейміз

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-қадам - электрондық поштаға кіру рұқсатын сұрау

Менің сайтым хабарлама хабарламаларын пошта арқылы жіберу үшін өз жүйесін пайдаланады, сондықтан мен үшін ресурстағы жаңа оқиғалар туралы хабардар ету үшін пайдаланушының электрондық поштасына қол жеткізу маңызды, сондықтан электрондық поштаға рұқсат алу үшін сұрауды қосамыз.

SOCIAL_AUTH_VK_OAUTH2_SCOPE = ['email']

Django үшін VDS хостингін ұсынамын TIMEWEB

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

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

bernar92
  • Шілде 14, 2018, 12:17 Т.Ж.

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

Evgenii Legotckoi
  • Шілде 14, 2018, 2:35 Т.Қ.

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

В следующей статье будет описан этот момент. Опубликую статью в понедельник.
bernar92
  • Там. 7, 2018, 12:10 Т.Ж.

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

Evgenii Legotckoi
  • Там. 7, 2018, 2:48 Т.Ж.

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

Misha Lebedev
  • Қаң. 14, 2019, 12:32 Т.Ж.

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

Evgenii Legotckoi
  • Қаң. 14, 2019, 2:57 Т.Ж.

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

ИИ
  • Наурыз 28, 2019, 8:44 Т.Ж.

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

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

Evgenii Legotckoi
  • Наурыз 28, 2019, 2:07 Т.Қ.

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

ИИ
  • Наурыз 28, 2019, 5:08 Т.Қ.

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

Evgenii Legotckoi
  • Наурыз 29, 2019, 8: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 Т.Ж.

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

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, 5:01 Т.Қ.
  • (өңделген)

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

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

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

ИИ
  • Наурыз 29, 2019, 5: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, 5: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, 6:03 Т.Қ.

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

VP
  • Наурыз 30, 2019, 9:55 Т.Қ.

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

Evgenii Legotckoi
  • Сәуір 4, 2019, 3:35 Т.Қ.

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

m
  • Қыр. 29, 2019, 7:39 Т.Ж.

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

Evgenii Legotckoi
  • Қыр. 29, 2019, 8:14 Т.Ж.

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

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

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

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

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

m
  • Қыр. 29, 2019, 8:56 Т.Ж.

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

Evgenii Legotckoi
  • Қыр. 30, 2019, 3:33 Т.Ж.

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

КК
  • Қаз. 15, 2019, 8:55 Т.Ж.

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

КК
  • Қаз. 15, 2019, 8:57 Т.Ж.

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

КК
  • Қаз. 15, 2019, 9 Т.Ж.
  • (өңделген)

Шаг 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, 9:09 Т.Ж.

Добрый день.

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

КК
  • Қаз. 15, 2019, 7:52 Т.Қ.

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

КК
  • Қаз. 15, 2019, 8:22 Т.Қ.

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

КК
  • Қаз. 15, 2019, 8:24 Т.Қ.

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

Evgenii Legotckoi
  • Қаз. 16, 2019, 4:42 Т.Ж.

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

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

sudo pip install psycopg2 

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

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

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

КК
  • Қаз. 16, 2019, 7:39 Т.Ж.

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

Evgenii Legotckoi
  • Қаз. 16, 2019, 7:45 Т.Ж.

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

АМ
  • Қаз. 25, 2019, 7:33 Т.Ж.

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

Evgenii Legotckoi
  • Қаз. 25, 2019, 7:54 Т.Ж.

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

A.
  • Қар. 6, 2019, 11:41 Т.Қ.

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

Yk
  • Қар. 27, 2019, 8: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, 8: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, 8: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, 9: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, 8:47 Т.Ж.

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

progammist
  • Сәуір 13, 2020, 9:09 Т.Ж.
  • (өңделген)

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

Evgenii Legotckoi
  • Сәуір 13, 2020, 9: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, 2:51 Т.Ж.

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

progammist
  • Сәуір 24, 2020, 5:46 Т.Ж.
  • (өңделген)

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

Evgenii Legotckoi
  • Сәуір 24, 2020, 5:49 Т.Ж.

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

progammist
  • Сәуір 24, 2020, 6:02 Т.Ж.
  • (өңделген)

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

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

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

Evgenii Legotckoi
  • Сәуір 24, 2020, 7:40 Т.Ж.

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

progammist
  • Сәуір 24, 2020, 11:28 Т.Ж.

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

Evgenii Legotckoi
  • Сәуір 26, 2020, 3: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, 6:24 Т.Ж.
  • (өңделген)

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

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

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

Evgenii Legotckoi
  • Мамыр 29, 2020, 7:14 Т.Ж.

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

YE
  • Қар. 4, 2020, 6:55 Т.Ж.

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

ДТ
  • Қар. 4, 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, 4:29 Т.Ж.

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

Evgenii Legotckoi
  • Қаң. 28, 2021, 4:34 Т.Ж.

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

path('', include('social_django.urls')),
A
  • Сәуір 28, 2021, 1: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
  • Шілде 2, 2021, 5:09 Т.Ж.

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

AF
  • Қаз. 29, 2021, 9:44 Т.Ж.

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

q
  • Жел. 20, 2021, 6: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
  • Мамыр 5, 2022, 6: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

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

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
Г

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

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

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

Бізді әлеуметтік желілерде бақылаңыз