Авторизация по номеру телефона
При такой авторизации требуется подтвердить номер телефона, вводом кода подтверждения, полученного по SMS. Отдельный экран «Регистрация» не требуется, так как при авторизации сервер сам может определить является ли данный пользователь новым или ранее он уже регистрировался.
Плюсы: простота авторизации, минимум запрашиваемых у пользователя данных, сразу получаете достоверный номер телефон.
Минусы: не подходит для приложений, которые используют миллионы, рассылка SMS требует затрат. По состоянию на 01.04.2021 средняя стоимость SMS 3,5-4 рубля.
Авторизация с применением только номера телефона очень проста, но может быть использована, если количество пользователей приложения не превышает несколько сотен. Лучше если аудитория приложения локализована в рамках одной страны. Например, России. Это связано с необходимостью рассылки SMS.
Нет необходимости реализовывать процедуру восстановления пароля (сброс пароля), так как пароль не используется.
Смена номера телефона для пользователя не доступна. Сменить номер телефона пользователя может только администратор через Админ панель.
Авторизация по номеру телефона и паролю
При авторизации нет необходимости проверять сразу телефон. Проверку достоверности номера телефона легко можно проверить позднее. Например, при возникновении подозрительной активности или при очередной авторизации. При регистрации пароль пользователь вводит сам. Чтобы избежать ошибки при вводе пароля используются два поля ввода, для пароля и для повторного ввода пароля.
Сейчас популярно использовать при регистрации одно поле для ввода пароля, без повторного ввода пароля в отдельном поле, но при этом надо обязательно сразу выполнять подтверждение номера телефона кодом, полученным в виде SMS- сообщения. Если пользователь забудет пароль, то он может выполнить инициализацию сброса пароля и ему на телефон придет SMS-сообщение, содержащие временный пароль.
Авторизация через Google-аккаунт
В данный момент такой вид авторизации в мобильных приложениях распространяемых в России встречается редко.
1. Перейдите по ссылке и примите условия пользования.
2. Создайте новый проект:
3. Введите в поиске “API” и перейдите в раздел “APIs & Services”:
4. Включите API и сервисы:
Phpixie social — простая интеграция с соцсетями

Авторизация через соцсети это одна из самих частых задач с которыми сталкиваются разработчики развлекательных сайтов. Казалось бы там и делать нечего, ведь для каждого API существует PHP библиотека от самого вендора. Но что делать если надо подключить сразу несколько? Не хочется тянуть в проект кучу библиотек которые имплементируют один и тот же протокол OAuth, к тому же хотелось бы иметь какой-то единый интерфейс. PHPixie Social — маленькая библиотека с только одной зависимостью, которая позволяет легко работать сразу с Facebook, Twitter, Google и Вконтакте, а если вы используете PHPixie фреймворк то также сразу получаете авторизацию всего в несколько строчек кода.
Но сначала рассмотрим компонент сам по себе.
Конфигурация
<?php
$config = array(
// Имена провайдеров могут быть произвольными,
// но для простоты примера имя я взял с типа API
'facebook' => array(
'type' => 'facebook',
'appId' => '',
'appSecret' => '',
// опционально права которые запросить у пользователя,
'scope' => array(),
// опционально версия API
'apiVersion' => '2.3'
),
'twitter' => array(
'type' => 'twitter',
// Twitter работает через OAuth 1.0a
// поэтому поля отличаются
'consumerKey' => '',
'consumerSecret' => ''
),
'google' => array(
'type' => 'google',
'appId' => '',
'appSecret' => '',
// опционально
'scope' => array(),
'apiVersion' => '2.3'
),
'vk' => array(
'type' => 'vk',
'appId' => '',
'appSecret' => '',
// опционально
'scope' => array(),
'apiVersion' => '2.3'
),
);
Инициализация
// та единственная зависимость
$slice = new PHPixieSlice();
$config = $slice->arrayData($config);
$social = new PHPixieSocial($config);
Авторизация пользователя
Итак первое что нам надо сделать это запросить у пользователя авторизацию, для этого нам понадобится придумать какую-то ссылку куда API пришлет нам токен доступа. Тогда мы перенаправляем пользователя на страницу авторизации. Вот простой пример:
$callbackUrl = 'http://localhost.com/callback=1';
if(!isset($_GET['callback'])) {
//Если параметра нет, далаем редирект
$loginUrl = $social->get('facebook')->loginUrl($callbackUrl);
header('Location: '.$loginUrl);
} else {
// Если параметр есть, значит это к нам пришел ответ от API,
// с ним придет еще много параметров которые Social обработает сам.
// Заметьте, что значение $callbackUrl тут тоже нужно
$socialUser = $social->get('faceebook')->handleCallback($callbackUrl, $_GET);
if($socialUser === null) {
// Пользователь отклонил авторизацию
echo "You didn't authorize our app";
}else{
// Запрос к API от имени пользователя
var_dump($socialUser->get('me'));
}
}
Объект пользователя
$socialUser->id(); // ID пользователя в соцсети
// Дополнительная информация доступна после логина
$socialUser->loginData();
// GET Запрос
$socialUser->get('some/endpoint', $queryParams = array());
// POST Запрос
$socialUser->post('some/endpoint', $data = array(), $queryParams = array());
// Произвольный запрос
$socialUser->api('PUT', 'some/endpoint', $queryParams = array(), $data = array());
// Токен авторизации,
// его можно сериализировать и сохранить
// в сессии или в базе
$token = $social->token();
// Получить пользователя по токену
$socialUser = $social->get('facebook')->user($token);
// Кстати запросы можно делать сразу с токеном
$social->get('facebook')->get($token, 'some/endpoint', $queryParams = array());
$social->get('facebook')->post($token, 'some/endpoint', $data = array(), $queryParams = array());
$social->get('facebook')->api($token, 'PUT', 'some/endpoint', $queryParams = array(), $data = array());
Интеграция с фреймворком
В фреймворке по умолчанию доступен плагин к модулю авторизации, который обрабатывает логин пользователя и легко включается в его конфигурации. Те кто уже работает с фреймворком не найдут в этом ничего сложного, так что в этот раз вместо описания я оставлю ссылку на демо проект: https://github.com/phpixie/demo-socialauth
В нем пользователь сам выбирает через какую сеть авторизоваться. Если он зашел впервые, ему сразу-же создастся запись в табличке Users и логин запомнится через сессию. При последующем логине будет уже использоваться сущность с базы.
Чтобы попробовать Social, достаточно просто composer require phpixie/social, ну и как всегда, если у вас возникнуть какие-либо вопросы, обращайтесь сразу к нам в чат.
Yandex
1. Перейдите по ссылке (необходимо быть авторизованным в Яндексе);
Вконтакте
1. Авторизуйтесь ВКонтакте и перейдите по ссылке. В открывшейся форме дайте название вашему приложению и заполните необходимые поля:
Обратите внимание: в качестве платформы вы должны указать веб-сайт. Также, скорее всего вашим клиентам будет комфортнее, если вы назовете ваше приложение так же, как и свой магазин, но формально это необязательно.
Важно: укажите настоящий адрес вашего сайта и базовый домен!
2. После успешного создания приложения перейдите в настройки приложения и скопируйте необходимую информацию:
3. Укажите ее в панели администратора магазина:
Этого будет достаточно для работы вашего приложения. Если у вас несколько доменов вам следует указать их в настройках приложения:
Также можно добавить логотип своего сайта в качестве логотипа приложения, но на работоспособность это не повлияет.
Выбор способа авторизации
Для выбора способов авторизации надо ответить на следующие вопросы.
- Какова потенциальная численность будущей аудитории пользователей приложения? Это сотни или миллионы людей?
- Каковы характеристики целевой аудитории приложения (возраст, интересы)?
- Как использует интернет потенциальная целевая аудитория?
- Какая география будущих пользователей мобильного приложения?
Ответив на эти вопросы можно легко выбрать способ авторизации. Если планируется разработка мобильного приложения с «нуля», то лучше сразу спроектировать сервер Админ панели приложения с учетом поддержки выбранных способов авторизации.
Для чего это нужно
Каждый сайт заинтересован в новых посетителях, потому что им можно потом продать платную подписку или показать рекламу. Поэтому сайтам выгодно, чтобы регистрация была как можно проще, в идеале — по нажатию одной кнопки (а то и вообще без регистрации).
Параллельно с этим в интернете есть сервисы, которыми пользуются все: Яндекс, Гугл, фейсбук или Вконтакте. Почему бы не брать данные о пользователе с этих сервисов?
Для этого и придумали OAuth.
Как организовать авторизацию через соцсеть на мобильном, когда запрос перехватывает нативное приложение соцсети?
Столкнулся с такой проблемой: когда пользователи со смартфона (по крайней мере, андроид) пытаются войти на сайт через соцсеть, переход по ссылке для входа перехватывает нативное приложение FB или VK (правда не у всех и не во всех браузерах), соцсеть подтверждает вход, но фронтенд не может обработать данные.
У меня SPA, которое общается с бекендом по рест-апи, stateless. Вход через соцсеть организован через бекенд: у пользователя открывается новое окошко, там он подтверждает вход, редиректится на мою служебную страницу, где я подтверждаю вход и отдаю в json api-key и информацию о пользователе. Фронтенд её забирает и закрывает окно.
Всё работало прекрасно, пока работало через браузер. Когда запрос перехватывает нативное приложение соцсети, то после подтверждения запроса пользователь видит мою служебную страницу, а фронтенд её не видит, потому что она открыта в приложении соцсети, а не в браузере.
Что с этим делать – не понимаю пока.
Кто сталкивался с таким? Или какие есть более грамотные способы организации входа через соцсеть?
Как работает единая авторизация
Для пользователя всё выглядит просто: нажал «Войти через Яндекс», подтвердил Яндексу своё желание войти на нужный сайт, и всё — вы уже зарегистрировались на новом сайте и можете им пользоваться. Но что происходит под капотом?
Когда посетитель, например, сайта о программировании, нажимает «Войти через Яндекс», этот сайт отправляет в Яндекс запрос и говорит: «Тут кто-то хочет войти на мой сайт через ваш сервис, можете разобраться?»:
Как сделать авторизацию через открытие приложения, а не веб версию соц. сети на смартфоне?
Т.к. вконтакте намного меньше людей сидит через мобильный браузер, чем через приложение, соот-но не авторизовано в браузере, многие могут не помнить свои данные, либо просто лень вводить снова.
Можно ли этому доверять?
Скорее нет, чем да. С OAuth есть проблема: вы никогда не знаете, действительно ли это OAuth или это хакеры сделали штуку, похожую на OAuth, которая хочет украсть ваш пароль. На всякий случай вот техника безопасности:
⚠️ Во всех важных сервисах включайте двухфакторную авторизацию: чтобы не только вводить пароль, но и получать СМС.
Раздел “приложения для авторизации через соцсети”
Для того, чтобы сделать авторизацию через какой-либо упомянутый выше сайт необходимо добавить данные соответствующего приложения на платформе выбранного вами сайта (условимся называть этот сайт провайдером).
Сначала необходимо перейти в раздел “Настройки” → “Авторизация” и нажать кнопку “Добавить”:
Далее необходимо заполнить форму данными о приложении:
Данные для заполнения формы будут доступны в настройках приложения после его создания. После указания всех необходимых данных кнопка авторизации через данного провайдера автоматически появится у вас на сайте.
Важно: вы можете добавить не более одного приложения каждого провайдера. Для создания приложения социальной сети у вас должен быть аккаунт в этой социальной сети.
Рассмотрим подробнее как создавать подобные приложения у провайдеров.