• en
  • Language: ru
  • Documentation version: 0.1

VK.com (бывший «Вконтакте»)

Поддержка сервиса авторизации VK.com (бывший Вконтакте).

OAuth2

VK.com использует OAuth2 для аутентификации.

  • Зарегистрируйте новое приложение по адресу VK.com API,

  • заполните значения Application Id и Application Secret в настройках:

    SOCIAL_AUTH_VK_OAUTH2_KEY = ''
    SOCIAL_AUTH_VK_OAUTH2_SECRET = ''
    
  • Добавьте 'social_core.backends.vk.VKOAuth2' к вашему SOCIAL_AUTH_AUTHENTICATION_BACKENDS.

  • Затем вы можете начать использовать /login/vk-oauth2 в href вашей ссылки.

  • Также можно определить дополнительные разрешения с помощью:

    SOCIAL_AUTH_VK_OAUTH2_SCOPE = [...]
    

    См. VK.com list of permissions.

Приложение OAuth2

Для поддержки аутентификации OAuth2 для приложений VK.com:

  • Создайте свое приложение IFrame на VK.com.

  • В настройках приложения укажите URL вашего IFrame https://mysite.com/complete/vk-app (текущее значение по умолчанию).

  • В настройках приложения укажите первый запрос API. Например:

    method=getProfiles&uids={viewer_id}&format=json&v=5.53&fields=id,first_name,last_name,screen_name,photo
    

    См. documentation on available fields.

  • Add 'social_core.backends.vk.VKAppOAuth2' into your SOCIAL_AUTH_AUTHENTICATION_BACKENDS.

  • Настройки заполнения Application ID и << 1 >>>:

    SOCIAL_AUTH_VK_APP_KEY = ''
    SOCIAL_AUTH_VK_APP_SECRET = ''
    
  • Заполнить user_mode:

    SOCIAL_AUTH_VK_APP_USER_MODE = 2
    
    Возможные значения:
    • 0: не будет проверяться, подключился ли пользователь к вашему приложению или нет

    • 1: python-social-auth будет проверять is_app_user параметр, который VK.com отправляет, когда пользователь открывает страницу приложения один раз

    • 2: (самый безопасный) python-social-auth будет проверять статус пользователя интерактивно (полезно при интерактивной аутентификации через AJAX)

  • Добавьте в шаблон входа в систему фрагмент, подобный этому:

    <script src="http://vk.com/js/api/xd_connection.js?2" type="text/javascript"></script>
    <script type="text/javascript">
        VK.init(function() {
                VK.addCallback("onApplicationAdded", requestRights);
                VK.addCallback("onSettingsChanged", onSettingsChanged);
            }
        );
    
        function startConnect() {
            VK.callMethod('showInstallBox');
        }
    
        function requestRights() {
            VK.callMethod('showSettingsBox', 1 + 2); // 1+2 is just an example
        }
    
        function onSettingsChanged(settings) {
            window.location.reload();
        }
    </script>
    <a href="#" onclick="startConnect(); return false;">Click to authenticate</a>
    

Для проверки запустите сервер с помощью sudo ./manage.py mysite.com:80, чтобы браузер мог загрузить его, когда VK.com вызовет IFrame URL. Откройте страницу вашего приложения VK.com через http://vk.com/app<app_id>. Теперь вы можете подключиться к приложению и автоматически войти в систему после подключения при посещении страницы приложения.

Более подробную информацию можно найти в разделе authentication for VK.com applications

OpenAPI

Вы также можете использовать собственный OpenAPI VK.com для входа в систему, но вам необходимо предоставить HTML-шаблон с кодом JavaScript для аутентификации, пример смотрите ниже.

  • Получите OpenAPI App Id и добавьте его в настройки:

    SOCIAL_AUTH_VK_OPENAPI_APP_ID = ''
    

    Этот идентификатор приложения будет передан в шаблон как VK_APP_ID.

  • Add 'social_core.backends.vk.VKontakteOpenAPI' into your SOCIAL_AUTH_AUTHENTICATION_BACKENDS.

Пример фрагмента:

<script src="http://vk.com/js/api/openapi.js" type="text/javascript"></script>
<script type="text/javascript">
    var vkAppId = {{ VK_APP_ID|default:"null" }};
    if (vkAppId) {
        VK.init({ apiId: vkAppId });
    }
    function authVK () {
        if (!vkAppId) {
            alert ("Please specify VK.com APP ID in your local settings file");
            return false;
        }
        VK.Auth.login(function(response) {
            var params = "";
            if (response.session) {
                params = "first_name=" + encodeURI(response.session.user.first_name) + "&last_name=" + encodeURI(response.session.user.last_name);
                params += "&nickname=" + encodeURI(response.session.user.nickname) + "&id=" + encodeURI(response.session.user.id);
            }
            window.location = "{{ VK_COMPLETE_URL }}?" + params;
        });
        return false;
    }
</script>
<a href="javascript:void(0);" onclick="authVK();">Click to authorize</a>