[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Авторизация
paul85
Здравствуйте, многоуважаемые форумчане!

Пытаюсь понять механизм работы сабжа. Посмотрел видео на ютюбе, погуглил, посмотрел еще пару ресурсов, но полного просветления не наступило... =(

Из всего изученного стало ясно:
1. На всех ресурсах (yandex, google, vk, facebook и т.д.) нужно заводить, так называемое, приложение. Через которое получают данные для генерации URL.
2. Существуют протоколы OAuth1, OAuth2 и OpenID.
3. У всех сервисов порядок авторизации чуть-чуть различается.

Теперь что НЕ понятно:
Как идентифицировать пользователя у себя на проекте? Вот пришел чел, нажал кнопку, ушел на ресурс vk.com, пообщался с тем ресурсом и вернулся обратно, прихватив в параметре GET - token. Правильно я понимаю? Далее я по этому токену запрашиваю инфу по нему: email, имя, ID и т.д. Хорошо если юзверь у меня зареган с тем же, скажем, email. Тогда я могу понять кто это сравнив адреса. А если нет?

Если у меня авторизация через множество сервисов, и пришел ко мне человек. И каждый раз авторизуется через разные, да еще и везде у него разные данные включая фамилию и email? Опять же как понять кто это?

Наверное эти вопросы больше связаны с регистрацией... Но правда, если различные данные, а человек-то один! То есть через vk.com сработает, а через google уже нет?
inpost
paul85
Знаешь механизм iframe? Грубо говоря открывается другой сайт... возвращаемся в авторизацию.

На самом деле юзер должен быть авторизирован ТАМ, тогда грубо говоря ты этого пользователя отправляешь на сайт вк.
Действие№1: header("Location: vk.com/api");

Он попадает туда и автоматом отправляется ответ назад:
Действие№2: header("Location: твой сайт?login=login&name=name&surname=surname");

Как бы пользователя кидает туда, там он сам собирает информацию о себе и перенаправляется к тебе обратно уже с собранной информацией.
____________________________
Механизм понятен? Именно так сделано на многих сайтах. Есть кнопка под названием: "авторизироваться через vk" и она ссылается на АПИ страницу, если он не авторизирован, то на vk ему предложат авторизироваться, а если авторизирован, то тут же редирект обратно и он даже не заметит редирект обратно, а путь куда редиректить либо через GET параметры передаёшь, либо через REFERER.

_____________________________

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

А теперь поняв механизм сверху можно отправить кросс-доменный Ajax на все существующие ресурсы: http://javascript.ru/ajax/cross-origin-2 , и получить ответ по всем, тем самым при первом входе авторизировать его по одной из соц.сетей (или по всем одновременно). Если в следующей авторизации у него ещё одна соц.сеть оказалась, где он авторизирован, то и по ней авторизироваться. Тем самым аяксом кучу запросов и информируешь, что вы авторизировались через единый аккаунт в нескольких соц.сетях.

Кстати, когда последний раз автоавторизацию на одном сайте проходил, то у меня при входе задали уточняющий вопрос: "это точно Ваш аккаунт?", то есть я подтверждаю, а в системе регистрируюсь я как я из такой-то соц.сети. Ну а ты можешь всю информацию собрать.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
paul85
MiksIr, я понял, спасибо!
Цитата
Потом почту из поля проверяем по базе юзеров. Если она уже есть - говорим человеку "ты у нас уже через фейсбук авторизовался ранее

А почему сразу не мапить к существующему аккаунту профиль? Зачем еще одна авторизация на facebook если по уникальному email идет совпадение? На тот случай если захочет все-таки разные аккаунты?

inpost, я честно говоря мало что понял... Я отправляю человека на vk.com, он там авторизуется - это понятно. С чего он обратно придет да еще с такими GET параметрами? Тогда где их описание? Насколько я понял обратно клиент приходит с параметром - token. Я беру этот token и запрашиваю vk через API (причем через https, то есть надо будет использовать CURL).

То есть мы надеемся на то, что в соседней вкладке у пользователя открыта какая-то соц. сеть?
inpost
paul85
Я расписал выше как происходит. Человек должен быть авторизирован в соц.сети, а не открыта во вкладке. И тут важно не GET, так как способ передачи ответа может быть разный у разных соц.сетях, а суть в том, что человек ушел на тот сайт и вернулся с конкретными данными о себе. Он там авторизирован и сходил туда, забрал данные и вернулся. Так выглядит API.
google: "авторизация vkontakte api" , и изучаешь 1 авторизацию, и так шаг за шагом.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
paul85
Цитата
Он там авторизирован и сходил туда, забрал данные и вернулся.

Какие данные клиент забирает, я никак не могу понять... Клиент вернулся с token в зпросе GET. Данные забираю уже я.

Там в гугле написано одно. Здесь Вы пишете вообще совершенно другое. Я вообще не понял ни одного слова. Какая асинхронная передача? Куда? Какая-то библия через яву что ли?
kaww
Цитата (paul85 @ 11.01.2014 - 20:10)
Если у меня авторизация через множество сервисов, и пришел ко мне человек. И каждый раз авторизуется через разные, да еще и везде у него разные данные включая фамилию и email? Опять же как понять кто это?


У нас этот механизм реализован следующим образом:
Есть таблица пользователей и таблица аккаунтов соц. сетей (sn_name, sn_uid, user_id, где составной первичный ключ по всем полям и)
Пользователь кликает по кнопки авторизации через какую-нибудь соц. сеть. и возвращается с токеном. По данным пользователя, полученным от провайдера авторизации, ищем пользователя у себя в базе по sn_name и sn_uid или в таблице users по email.
Далее в зависимости от результата: Если нашли по sn_name и sn_uid, то просто авторизуем пользователя. Если нашли по email, то говорим пользователю, что возможно он уже зарегистрирован (т.к. есть пользователь с таким email), и предлагаем ему выбрать из вариантов:
1. Привязать (об этом ниже) эту социальную сеть к существующему аккаунту.
2. Создать новый аккаунт. В этом случае просим ввести новый адрес электропочты.
Если пользователя нет, то создаем.
Привязка аккаунта провайдера авторизации:
У пользователей есть возможность авторизоваться через несколько соц. сетей. Может он это сделать способом описанным выше или если он уже авторизован в системе, то при авторизации через соц.сеть создается запись в таблице аккаунтов соц. сетей с его user_id
zelenin
обратно приходит токен вместе с id пользователя. Вот выдержка из олдного моего проекта:


$access_token = $response['access_token'];
$user_id = $response['user_id'];

$vk = new Vk( $access_token );

$response = $vk->api( 'users.get', array(
'user_ids' => $user_id,
'fields' => 'sex,bdate,city,education,relation'
) );
paul85
Большое всем спасибо за ответы!
SamurayPHP
А кто то знает? где регистрировать сайт на гугле.
чтоб он домену отдавал авторизацию?

McLotos
Цитата (SamurayPHP @ 16.08.2014 - 01:52)
чтоб он домену отдавал авторизацию

поясни что ты хочешь сделать

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.