Онлайн-руководство разработчика NetCat
Новогодние скидки до 25%!
Подробнее
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

Авторизация через внешние сервисы

Модуль позволяет пользователям авторизироваться через:

Пользователь, авторизовавшись через один из этих сервисов попадает в базу пользователей вашего сайта, в последствие он может задать себе логин/пароль или изменить профайл (например, сменить аватар).

Настройка такого типа авторизации происходит через настройки модуля «Личный кабинет» - «Регистрация и Авторизация» - «Через внешние сервисы». Для каждого сервиса задается:

  • группы, куда попадет пользователь после авторизации
  • действие перед первой авторизацией
  • действие после первой авторизации
  • соответствие полей.

Действие перед первой авторизацией содержит php-код, который выполнится до того, как пользователь будет авторизирован и занесен в базу пользователей сайта. PHP-код следует указывать без открывающих и закрывающих тегов. В этом блоке доступны переменные и массивы:

Параметр Описание
$ex_user_id идентификатор пользователя в сервисе, по которому идет авторизация ( например, в ВКонтакте — это номер, в OpenID – логин)
$userinfo массив с данными о пользователе, который передал сервис
$nc_core системный объект класса nc_Core

Действие после первой авторизации содержит php-код, который выполнится после того, как пользователь будет авторизирован и занесен в базу пользователей сайта. PHP-код следует указывать без открывающих и закрывающих тегов. В этом блоке доступны переменные и массивы:

Параметр Описание
$user_id номер пользователя в системе NetCat
$ex_user_id идентификатор пользователя в сервисе, по которому идет авторизация ( например, в ВКонтакте — это номер, в OpenID – логин)
$userinfo массив с данными о пользователе, который передал сервис
$nc_core системный объект класса nc_Core

Сервисы могут передавать некоторую информацию о пользователе (например, ник, имя, фамилия, фотография, эл. почта). Эту информацию можно записать в профайл авторизированного пользователя, для этого есть блок «Соответствие полей».

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

Более подробно о встраивании форм авторизации через внешние сервисы можно прочитать в описании функции $nc_auth->auth_form()

Авторизация через Вконтакте

Для того, чтобы пользователи могли авторизоваться на вашем сайте через Вконтакте, необходимо сначала зарегистрировать приложение на сайте vk.com. На момент написания документации ссылка на добавление приложения была такая: https://vk.com/editapp?act=create

Заполните требуемые поля:

После регистрации приложения вы получите ID приложения и защищённый ключ:

Скопируйте эти параметры и вставьте в настройки модуля в поля ID приложения и защищенный ключ в области «Вконтакте»:

После чего на сайте можно будет авторизоваться через vk.com.

Если для вывода формы авторизации вы используете метод $nc_auth->auth_form() (макропеременная %vk_form), то он автоматически покажет кнопку «Войти через Вконтакте»:

При использовании своей формы авторизации можете воспользоваться следующим кодом для показа кнопки «авторизоваться через Вконтакте»:

<div id='login_button' class='vk_login_button' onclick='nc_vk_login(<?= $nc_auth_vk->is_member(); ?>)'></div>
<script src='http://vk.com/js/api/openapi.js' type='text/javascript'></script>
<script type='text/javascript'>
    function nc_vk_login ( is_member ) {
        var is_mem = is_member || 0;
        if ( !is_mem ) VK.Auth.login( nc_vk_login );
        else
        location.href='<?= $nc_core->SUB_FOLDER.$nc_core->HTTP_ROOT_PATH; ?>modules/auth/?nc_vk=1&REQUESTED_FROM=<?= htmlspecialchars($REQUEST_URI,ENT_QUOTES ); ?>';
        }
        VK.init({ apiId: <?= $nc_auth_vk->get_app_id(); ?> });
        VK.UI.button('login_button');
</script>

Авторизация через Facebook

По аналогии с авторизацией через Вконтакте, Вам надо предварительно создать новое приложение на сайте facebook.com. На момент написании документации (30.09.2014) это можно было сделать по ссылке https://developers.facebook.com/quickstarts/?platform=web (версия API 2.1).

В окне введите адрес сайта и нажмите кнопку создания нового приложения

На следующем шаге укажите категорию приложения.

После создания приложения в разделе "Клиентские настройки OAuth" вы должны указать в поле "Действительные URI перенаправления для OAuth" следующие адреса:

https://example.com/netcat/modules/auth/?nc_fb=1
https://example.com/netcat/modules/auth/endpoint/?hauth_done=Facebook

где вместо example.com вы должны указать домен вашего сайта.

Затем вы можете зайти в меню Apps → ваше приложение и на открывшейся странице получить номер приложения (App ID) и его секретный ключ (App Secret). 

Эти параметры нужно добавить в настройки модуля:

После сохранения настроек пользователи смогут регистрироваться и авторизовываться на сайте через Facebook

Если для вывода формы авторизации вы используете метод auth_form (макропеременная %fb_form), то он автоматически покажет кнопку «facebook Войти»:

При использовании своей формы авторизации можете воспользоваться следующим кодом для показа кнопки авторизации:

<?php
echo "
<div id='fb-root'></div>
<fb:login-button>Войти</fb:login-button>
<script type='text/javascript'>
    window.fbAsyncInit = function() {
        FB.init({ appId: ".$nc_auth_fb->get_app_id().", status: false, cookie: false, xfbml: true, oauth: true});
        function updateButton(response) {
            if (response.authResponse) {
                location.href = '".$nc_core->SUB_FOLDER.$nc_core->HTTP_ROOT_PATH."modules/auth/?nc_fb=1&token='+response.authResponse.accessToken+'&REQUESTED_FROM=".htmlspecialchars($REQUEST_URI, ENT_QUOTES)."';
            } else {
                var button = document.getElementById('fb-auth');
                button.onclick = function() {
                    FB.login(function(response) {
                        if (response.authResponse) {
                            location.href = '".$nc_core->SUB_FOLDER.$nc_core->HTTP_ROOT_PATH."modules/auth/?nc_fb=1&token='+response.authResponse.accessToken+'&REQUESTED_FROM=".htmlspecialchars($REQUEST_URI, ENT_QUOTES)."';
                        } else {
                            //error
                        }
                    }, {scope:'email'});
                }
            }
        }
        FB.Event.subscribe('auth.statusChange', updateButton);    
    };    
    (function(d){
         var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
         js = d.createElement('script'); js.id = id; js.async = true;
         js.src = \"//connect.facebook.net/ru_RU/all.js\";
         d.getElementsByTagName('head')[0].appendChild(js);
       }(document));
</script>"; ?>

Авторизация через Twitter

Для авторизации через твиттер Вам необходимо создать новое приложение по ссылке ( действительна на момент написания документации): https://apps.twitter.com/app/new

В первом окне заполните необходимые поля: название приложения, описание и адрес сайта. После успешной регистрации приложения, вы получите API key и API secret:

Скопируйте эти параметры и вставьте в настройки модуля:

Примечание: В настройках twitter-приложения параметр Callback URL должен быть заполнен значением вида "http://имя.сайта/netcat/modules/auth/?nc_twitter=1".

Теперь, чтобы пользователь авторизовался через твиттер, ему нужно пройти по ссылке

/netcat/modules/auth/?nc_twitter=1

То есть форму авторизации можно сделать так:

<a href='/netcat/modules/auth/?nc_twitter=1'>
<img src='Путь до значка твиттера' alt='Авторизоваться через твиттер' />
</a>

Форма авторизации через Twitter в форме авторизации пользователя выводится при помощи макропеременной %twitter_form

Авторизация через OpenID

В разделе авторизации через openid, вы можете добавлять или удалять провайдеров, с помощью которых необходимо настроить авторизацию.

По умолчанию в системе уже добавлены Google, Mail.ru, Yandex и MyOpenID.

Для каждого сервиса необходимо указать OpenID URL, для сервисов по умолчанию - подставить свои параметры в ссылки для авторизации в соответствующих полях.

Форма авторизации по openid в форме авторизации пользователя выводится при помощи макропеременной %openid_form

Комментарии 3

Новоселов Евгений Владимирович 31 января 2016, 13:19:05
Почему в инструкции не написано как разместить кнопку авторизации, например "В контакте", на всплывающей форме типового сайта. Большая просьба, допишите данную инструкцию, иначе получается, что типовой сайт не может использовать авторизацию через соц. сети без привлечения программиста.
   
Дмитрий Коновалов  Activica 14 февраля 2018, 19:40:42
http://prntscr.com/iephws - тут должно быть window.location.href
   
Pilot  Тех-Альянс 07 марта 2019, 13:21:16
Дополняю документацию. Для авторизации через OAuth в настройках Яндекса необходимо указать CallBack URL https://example.com/netcat/modules/auth/endpoint/?hauth.done=Yandex
   
Описание проекта