Получение access token vk. Django

Рейтинг: 1Ответов: 1Опубликовано: 01.03.2023

Суть такова: сделать так называемую привязку VK с целью получения access token. Зашел в документацию VK - нашел инфу:Документация VK API

Я пытаюсь делать запрос, выдается ошибка: { "error": "invalid_client", "error_description": "client_id is undefined" } Так же сначала попробовал сделать авторизацию через VK, думая, что так смогу получить access token(не знаю, можно ли так действительно получить), и у меня вроде получилось реализовать авторизацию, и ошибок о client_id не было. Вопрос таков: Правильно ли сама мысль о получении access token(имеется в виду, делается ли это действительно так, как я задумал или же все в корне не верно)? Если нет, то как это можно реализовать, если да, то где ошибки? Код ниже

views.py Перенаправление на vk

@login_required
def vk_link(request):
    return redirect('https://oauth.vk.com/access_token/', params={
        'client_id': 'id',
        'client_secret': 'token',
        'redirect_url': 'http://127.0.0.1:8000/profile',
        'code': request.GET.get('code'),
    })

urls.py

urlpatterns = [
    re_path(r'^login', views.login, name="login"),
    path('admin/', admin.site.urls),
    path('', views.index, name="main"),
    path('signUp', views.signUp, name="signUp"),
    path('profile', views.profile, name='profile'),
    path('logout', views.logout_view, name='logout'),
    path('vk', views.vk_link, name="vk"),
]

кнопка перенаправления

<a href="{% url 'vk' %}">
    <img src="" alt="vk">
</a>

id и secret заменил по понятным причинам

EDIT Правильно ли я передаю параметры при redirect? Может быть в этом проблема? Видел, как параметры ещё передают через urlencode(),но с ним у меня тоже не получилось, ошибка та же

Скрин ошибки Ошибка при переходе на ссылку

Ответы

▲ 1Принят

Когда вы делаете redirect("...", params={...}), то параметры, как я правильно помню, никуда не попадают. Это можно исправить, если их добавить вручную к url запроса используя urllib.parse

Решение будет выглядеть так:

from urllib import parse

...

@login_required
def vk_link(request):
    return redirect(
        'https://oauth.vk.com/access_token/?' + parse.urlencode({
            'client_id': 'id',
            'client_secret': 'token',
            'redirect_url': 'http://127.0.0.1:8000/profile',
            'code': request.GET.get('code'),
        })
    )

Ответ с английского StackOverflow: Add params to given URL in Python