Доверенный redirect uri vk что это

Django-allauth замечательный пакет для авторизации пользователей на своём сайте, который берёт на себя рутинные операции по регистрации пользователей обычным способом через форму, а также через популярные социальные сети.

Не сложно и самому написать код авторизации для каждой соц. сети, используя их соответствующую документацию. Но мой вам совет, используйте готовую библиотеку для авторизации, например, рассматриваемую в этой статье Django-allauth, и настройте её под свои нужды. Потому что готовые решения, как правило, берут на себя всю рутину по регистрации, входу на сайт и добавление нескольких учётных записей разных социальных приложений в один аккаунт.

На данный момент приложение поддерживает более 60 соц. сетей (провайдеров).

Кроме типичных полей Имя, Фамилия, Email и Пароль вы легко сможете добавить дополнительные поля. Также можно легко написать свою авторизацию через соц. сеть, если ее нет в списке поддерживаемых, так как провайдеры описаны через единый интерфейс, то есть уснаследуются от одного класса OAuth2Provider или OAuthProvider , который обрабатывает протокол авторизации OAuth 2 или OAuth соответственно.

Что такое 301-й редирект, для чего он нужен и как его сделать

Хорошо, что Django-allauth предоставляет возможность добавлять несколько email-ов пользователей и указывать основной. Бывает, что пользователь вдруг теряет контроль над одной какой-нибудь своей электронной почтой и тут приходят на помощь резервные email-ы, на которые могут прийти пароли или важные письма с вашего сайта.

Список всех преимуществ вы найдёте в официальной документации http://django-allauth.readthedocs.io/en/latest/index.html

Доверенный redirect URI

Во многих соц. сетях при добавлении приложения спрашивают про некий Доверенный redirect URI (или Действительные URL-адреса для перенаправления OAuth ) например в ВК:

Доверенный redirect URI нужен для дополнительной защиты приложения от утечек токенов зарегистрировавшихся пользователей в следствие хакерских атак.

В django-allauth Доверенный redirect URI строится по следующему принципу:

http://[domain]/accounts/[provider]/login/callback/

где [domain] — домен сайта, а [provider] — социальная сеть (приложение) типа vk, google, facebook и т. д.

В некоторых приложениях, в том числе и в ВКонтакте, есть возможность протестировать авторизацию локально на девелоперской машине. Для этого обычно в настройки нужно добавить localhost в Базовые домены и http://localhost:8000/accounts/[provider]/login/callback/ в Доверенный redirect URI .

Дополнительная информация по использованию django-allauth для конкретных социальных приложений:

  1. Авторизация через социальную сеть Вконтакте
  2. Авторизация через социальную сеть Facebook
  3. Авторизация пользователей через Google

Простейший пример использования django-allauth

Устанавливаем и настраиваем django-allauth согласно документации http://django-allauth.readthedocs.io/en/latest/installation.html. Попробуем добавить авторизацию через ВКонтакте. Для начала нужно зарегистрировать своё приложение в VK.

Еще по теме:  Как отметить друга на видео в Вконтакте

Работа с API VK (Вконтакте) через JavaScript. Урок 1. Вывод списка друзей

Замечание
В разделе http://django-allauth.readthedocs.io/en/latest/providers.html размещены поддерживаемые провайдеры и ссылки на документацию по регистрации приложения в соответствующей соц. сети.

Затем нужно убедиться, что провайдер VK добавлен в INSTALLED_APPS . Мои настройки в settings.py для django-allauth выглядят так:

SITE_ID = 1 TEMPLATES = [ < ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’, ‘DIRS’: [], ‘APP_DIRS’: True, ‘OPTIONS’: < ‘context_processors’: [ . ‘django.template.context_processors.request’, ], >, >, ] AUTHENTICATION_BACKENDS = ( . ‘django.contrib.auth.backends.ModelBackend’, ‘allauth.account.auth_backends.AuthenticationBackend’, ) INSTALLED_APPS = ( . # The following apps are required: ‘django.contrib.auth’, ‘django.contrib.sites’, ‘allauth’, ‘allauth.account’, ‘allauth.socialaccount’, # . include the providers you want to enable: ‘allauth.socialaccount.providers.vk’, . )

Для вывода всех подключённых провайдеров, вы можете использовать следующий код:

>» href=»»>> >» href=»»>>

И наконец, нужно связать полученные при регистрации приложения client_ID и секретный ключ с сайтом. Для этого в админке перейдите в Социальные приложения и добавьте социальное приложение:

Часто используемые настройки django-alluath

На всех сайтах я использую авторизацию через email и пароль, но в то же время без необходимости заполнять логин, поэтому я использую следующие настройки:

ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_USERNAME_REQUIRED = False ACCOUNT_AUTHENTICATION_METHOD = ’email’

Количество попыток входа в систему я оставляю по умолчанию (равное 5), но время таймаута ограничиваю до 60 секунд:

ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT = 60

Часто требуются дополнительные поля при регистрации пользователей, поэтому я создаю дополнительную форму:

class CustomSignupForm(forms.Form): first_name = forms.CharField(max_length=30, widget=forms.TextInput(attrs=)) last_name = forms.CharField(max_length=30, widget=forms.TextInput(attrs=)) GENDERS = ((‘man’, _(‘Man’)), (‘woman’, _(‘Woman’))) gender = forms.ChoiceField(label=_(‘Gender’), choices=GENDERS, widget=forms.Select()) def signup(self, request, user): user.first_name = self.cleaned_data[‘first_name’] user.last_name = self.cleaned_data[‘last_name’] user.gender = self.cleaned_data[‘gender’] user.save()

А затем подключаю её в settings.py:

ACCOUNT_SIGNUP_FORM_CLASS = ‘spec.forms.CustomSignupForm’

Теперь при выводе формы в шаблоне, мы увидим не только базовые поля (email и пароль), но и свои дополнительные поля. Получить такую форму в коде можно так:

# -*- coding: utf-8 -*- from allauth.account.forms import LoginForm, SignupForm def show_auth(request): return render(request, ‘auth.html’, )

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

# settings.py SOCIALACCOUNT_AUTO_SIGNUP = False

И очень полезная настройка — кастомный редирект после входа на сайт:

# settings.py ACCOUNT_ADAPTER = ‘project.users.adapter.MyAccountAdapter’ # spec/adapter.py from django.conf import settings from allauth.account.adapter import DefaultAccountAdapter class MyAccountAdapter(DefaultAccountAdapter): def get_login_redirect_url(self, request): return ‘/users/<>/’.format(request.user.username)

Ошибка resp.json()[‘response’][0] KeyError: ‘response’ для VK провайдера

Данная ошибка возникает в версиях allauth ниже 0.36.0 из-за того, что ВКонтакте изменили api, сделав параметр v обязательным ( v — версия api vk).

1-ый вариант решения: обновить allauth до версии 0.36.0

В allauth версии 0.36.0 этот параметр добавили, поэтому обновите allauth до указанной версии и всё должно заработать.

Еще по теме:  Как набрать больше голосов Вконтакте

2-ой вариант решения: переопределить VK провайдер

Если по каким-то причинам не хотите обновлять allauth, то вы можете и другим способом решеть проблему, добавив свой кастомный VK провайдер. Для этого нужно скопировать провайдер vk из приложения allauth (находится в allauth/socialaccount/providers/vk/ ) куда-нибудь в своё приложение, например, spec/providers/vk .

Добавляем в файле spec/providers/vk/views.py параметр ‘v’: ‘5.101’, в словарь params в функции complete_login класса VKOAuth2Adapter . Полный листинг приведён ниже:

import requests from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import VKProvider USER_FIELDS = [‘first_name’, ‘last_name’, ‘nickname’, ‘screen_name’, ‘sex’, ‘bdate’, ‘city’, ‘country’, ‘timezone’, ‘photo’, ‘photo_medium’, ‘photo_big’, ‘photo_max_orig’, ‘has_mobile’, ‘contacts’, ‘education’, ‘online’, ‘counters’, ‘relation’, ‘last_seen’, ‘activity’, ‘universities’] class VKOAuth2Adapter(OAuth2Adapter): provider_id = VKProvider.id access_token_url = ‘https://oauth.vk.com/access_token’ authorize_url = ‘https://oauth.vk.com/authorize’ profile_url = ‘https://api.vk.com/method/users.get’ def complete_login(self, request, app, token, **kwargs): uid = kwargs[‘response’].get(‘user_id’) params = < ‘v’: ‘5.101’, ‘access_token’: token.token, ‘fields’: ‘,’.join(USER_FIELDS), >if uid: params[‘user_ids’] = uid resp = requests.get(self.profile_url, params=params) resp.raise_for_status() extra_data = resp.json()[‘response’][0] email = kwargs[‘response’].get(’email’) if email: extra_data[’email’] = email return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(VKOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(VKOAuth2Adapter)

Затем в INSTALLED_APPS строчку ‘allauth.socialaccount.providers.vk’, заменить на ‘spec.providers.vk’,

Обратите внимание, что для старых версий allauth, необходимо также поменять параметр package в классе VKProvider на ‘spec.providers.vk’ (спасибо Александру за комментарий), а также в методе extract_uid(self, data) вернуть str(data[‘id’]) :

. class VKProvider(OAuth2Provider): name = ‘VK’ package = ‘spec.providers.vk’ account_class = VKAccount def get_default_scope(self): scope = [] if app_settings.QUERY_EMAIL: scope.append(’email’) return scope def extract_uid(self, data): return str(data[‘id’]) def extract_common_fields(self, data): return dict(email=data.get(’email’), last_name=data.get(‘last_name’), username=data.get(‘screen_name’), first_name=data.get(‘first_name’)) provider_classes = [VKProvider]

Теперь должно работать.

Использование django-allauth для конкретных приложений

  1. Авторизация через социальную сеть Вконтакте
  2. Авторизация через социальную сеть Facebook
  3. Авторизация пользователей через Google

Источник: vivazzi.pro

Ошибка при авторизации через VK. Как исправить?

Доброго времени суток. Делаю авторизацию через соц. сети через расширение yiisoft/yii2-authclient. Настроил твиттер и ядекс, и авторизация прекрасно прошла.
Но проблема в том, что не могу сделать для ВКонтакте. Я добавил свой clientId и clientSecret в код, который приведен ниже. В конфиг добавил (по такому же образу настроил и твиттер с ядексом):

‘vkontakte’ => [ ‘class’ => ‘yiiauthclientclientsVKontakte’, ‘clientId’ => ‘*******’, ‘clientSecret’ => ‘*************’, ],

У меня формируются ссылки вот на этой странице (Это все выводится на странице site.ru/login):

http://site.ru/auth/network/auth?authclient=vkontakte http://site.ru/auth/network/auth?authclient=twitter http://site.ru/auth/network/auth?authclient=yandex

5ae23daf38436290208366.png

В настройках приложения VK, есть такая форма:

Вопрос такой, что нужно ввести в поле «Доверенный redirect URI».
К примеру для Яндекса нужно было указать ссылку site.ru/auth/network/auth?authclient=yandex
Но VK говорит, что «Доверенный redirect URI, который будет передаваться при OAuth авторизации. Должен содержать протокол. Не может содержать URL параметры, фрагменты и относительные пути». Контакт даже не сохраняет ссылки имеющие GET параметр.
А если:
1. Ничего не писать в это поле то появляется ошибка:

array_shift() expects parameter 1 to be array, null given

Что мне написать?
За ранее большое спасибо))

  • Вопрос задан более трёх лет назад
  • 2175 просмотров
Еще по теме:  Как подключить смс оповещение Вконтакте

Источник: qna.habr.com

Ошибка при авторизации в VK через приложение на node.js

Добрый день, товарищи! Возникла проблема — не могу справиться с авторизацией через ВК в своем приложении ( node.js + express.js + passport.js ). При попытке авторизации браузер показывает следующее сообщение:

Все делал по примеру c данной страницы: Passport-VKontakte
Отслеживать
19.8k 5 5 золотых знаков 43 43 серебряных знака 61 61 бронзовый знак
задан 1 апр 2015 в 12:05
67 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

Если кто-то в будущем столкнется с этой проблемой, возможно вам поможет следующее:

  1. Убедитесь, что тип созданного вами приложения во Вконтакте поддерживает стороннюю авторизацию: standalone или веб-сайт
  2. Для standalone приложений убедитесь, что в настройках приложения взведена галочка open API. Пусть вас не смущает, что open API не имеет ничего общего с Oauth2.
  3. Если вы размещаете приложение на кириллическом домене, в настройках должен быть указан домен приложения именно в кириллическом наборе, а не в punycode. Да, фактически вариант punycode должен быть тождественным кириллице, но во Вконтакте вот так вот сложилось.

Отслеживать
ответ дан 26 фев 2017 в 15:13
161 1 1 серебряный знак 2 2 бронзовых знака

Убедитесь, что у вас адрес домена в redirect_url и базовый домен в приложении (в вконтакте) совпадают.

Отслеживать
ответ дан 1 апр 2015 в 13:27
584 2 2 серебряных знака 7 7 бронзовых знаков

На самом деле была проблема в другом — в ВК я создал приложение не того типа (standalone вместо веб-сайта). Ну и соответственно, не был указан домен.

2 апр 2015 в 7:18

Мне не удалось решить проблему вот так:

Нужно в настройках приложения Вконтакте сделать пустым поле Доверенный redirect URI:. После этого у меня все заработало.

Отслеживать
ответ дан 24 апр 2017 в 11:55
223 2 2 серебряных знака 5 5 бронзовых знаков

При использовании API в мобильном приложении заработало после того как стал передавать пустой redirect_uri. Пример запроса:

https://oauth.vk.com/authorize?client_id=123456response_type=tokenv=5.92
Отслеживать
ответ дан 27 апр 2019 в 6:37
Sergei Kuraksin Sergei Kuraksin
442 4 4 серебряных знака 6 6 бронзовых знаков

Для решения проблемы прокинул порт с помощью ngrok. Заполнил адрес сайта(с указанием протокола) и базовый домен(без указания протокола).

Доверенный redirect URI оставил пустым.

Отслеживать
ответ дан 3 апр в 6:29
Алексей Латыш Алексей Латыш

  • node.js
  • vkontakte-api
  • express
    Важное на Мете

Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник: ru.stackoverflow.com

Рейтинг
( Пока оценок нет )
Загрузка ...