-
Есть вот такая инструкция с сайта: Цитата: Процесс авторизации следующий:
1. Приложение запрашивает reuqest_token, соотвественно по URL'у, который был выдан сайтом;
2. Получив request_token, сайт редиректит на страницу авторизации приложения, на которой, допустим, написано «Желаете ли вы разрешить доступ к API сайта, приложению blablabla» и две кнопочки «Разрешить», «Запретить».
3. Пользователь нажал кнопочку «Разрешить», на сервере отметили, что данный пользователь разрешил доступ этому приложению, request_token такой-то, редиректим обратно на сайт приложения (при добавлении приложения необходимо указывать callback_uri – куда редиректить после авторизации), в адресе будет ключ oauth_token;
Нужно, чтобы пользователь был авторизован на сайте.
4. Ну вот, теперь осталось поменять request_token на access_token, благодаря которому мы можем обращаться к API сайта, обращаемся по адресу получения access_token, передаем туда request_token и забираем access_token, на будущее его лучше сохранить в базе.
В том случае, если пользователь нажал кнопочку «Запретить», то приложение не сможет получить access_token и не получиться авторизоваться. В итоге, имеем, request_token – нужен только для авторизации, access_token – тот самый ключ, благодаря которому приложение авторизуется.
Помогите реализовать это в делфи. Уже весь гугл перерыл и не нашел ничего.
-
Та же проблема... Не получается.
-
Это ты про OpenID? У них же вроде сайт есть целый, наверняка там есть подробная инструкция.
И не совсем понятно - что именно не получается? И что именно ты делаешь?
-
Ок, не OpenID, поспешил.
Но гугл в помощь.
-
Почему не добавляет мой комментарий???
-
Vkontakte API. Чтобы получить access_token делаем авторизацию:
procedure TForm1.btnLoginClick(Sender: TObject);
var logVK, html:string; PostVK: TStringList;
begin
html := IdHTTP1.Get('http://vkontakte.ru'); PostVK := TStringList.Create;
PostVK.Clear;
PostVK.Add('act=login');
PostVK.Add('ip_h=' + Pars(html,'ip_h=','\"',0));
PostVK.Add('email='+EditLogin.Text);
PostVK.Add('pass='+ EditPass.Text);
PostVK.Add('from_host=vkontakte.ru');
logVK := IdHTTP1.Post('https://login.vk.com/',PostVK);
PostVK.Free;
...
-
Далее делаем запрос на получение access_token:
IdHTTP1.Get('http://api.vkontakte.ru/oauth/authorize?client_id=2471061&scope=2&display=popup&redirect_uri=api.vk.com/blank.html&response_type=token');
Memo1.Lines.Clear;
Memo1.Lines.add(IdHTTP1.URL.URI);
end;
Теперь в поле Memo1 будет адрес страницы http://api.vkontakte.ru/blank.html, без дополнительных параметров: access_token, expires_in и user_id. ВОПРОС: КАК вытащить из IdHTTP эти параметры (в частности нам нужен только access_token) ???
-
А в документации что написано? Где возвращаются "эти параметры"
-
Вообще эти параметры возвращаются в строке адреса. Это можно увидеть, если браузере авторизоватся на сайте vkontakte.ru и перейди по адресу: http:
Строка адреса изменится на подобную этой: http: Но вот из своего IdHTTP1 я получаю только до символа #. А вот все, что после этого символа где-то теряется...
-
Пошаговая отладка спасет отца русской демократии!
-
Интересно, и как должна помочь Пошаговая отладка !? !? !? --- Перешел с Indy на Synapse. Если в Indy после запроса авторизации я реально вижу, что я Online на сайте и когда я получаю главную страницу vkontakte.ru, то я получаю страницу своего профиляю. А вот в Synapse после запроса авторизации есть проблема: Кукисы устанавливаются, но авторизации на сайте не происходит, и при запросе главной страницы сайта я получаю страницу приветствия на сайте (типа Добро пожаловать). Вопрос: Почему авторизация не происходит??? Что надо сделать, чтоб это исправить?
-
Протокол - это такая вещь, которая задает конкретные параметры - кто, кому, что и где должен передать, и что получить в ответ. И именно ТЫ должен это узнать.
Чтобы твой вопрос звучал так: "Я передаю компонентом X то-то и то-то, ожидаю в ответ се-то, а мне в ответ - шняга. Что я делаю не так?" Вот примерно как в 8-ом вопросе.
Я тебе ответил, что надо пошагово пройтись по внутренностям компонентов Инди, и посмотреть - что реально отвечает сервер на твой запрос, и где в компонентах ответ изменяется (если он изменяется).
-
"Пройтись по внутренностям компонентов инди и посмотреть" - Я что, сам не догадался пошагово идти!? Так если бы я это видел, что он эту строку где-то возвращает, СТАЛ БЫ Я ЭТО СПРАШИВАТЬ??? А пичкать советами, которые я и так знаю, не надо!
-
При авторизации через Synapse нужные кукисы не устанавливаются. Может это потому, что Cookie устанавливаются с помощью js-скрипта? Или в Synapse проблемы с js-скриптами???
-
> Или в Synapse проблемы с js-скриптами??? стоит ли отвечать, вот в чем вопрос... если после совета будет реплика "не нужно пичкать тем что сам знаю".
перечисли пожалуйста, что ты знаешь... ну чтобы не дай бог не дать уже "знаемый" совет.
-
А что, трудно недогадатся что-ли идти пошагово? Я же не спрашиваю например, как посмотреть значение переменной в какой-то момент времени, которая постоянно меняет свое значение! ПОВТОРЯЮ: Стал бы я спрашивать про все это, если бы я это знал??? Я спрашиваю конкретные вопросы: КАК ВЫТАЩИТЬ ИЗ IdHTTP1 ПАРАМЕТР access_token ПОСЛЕ АВТОРИЗАЦИИ ПРИЛОЖЕНИЯ? ПОЧЕМУ В Synapse НЕ ПРОИСХОДИТ АВТОРИЗАЦИЯ ПОЛЬЗОВАТЕЛЯ? Если по возможностям эта библиотека соответствует популярным Indy и стабильность у неё получше, то ПОЧЕМУ В INDY АВТОРИЗАЦИЯ ПРОХОДИТ НОРМАЛЬНО, А В SYNAPSE КОСЯК С ЭТИМ??? И если уж отвечаете, то ОТВЕЧАЙТЕ ПО ТЕМЕ! И НЕ НАДО ПРИДИРАТСЯ К СЛОВАМ! А отвечать ради того, чтобы что-то хоть написать и себя показать, то уж лучше тогда не пишите, если действительно не знаете! А если знаете, то будьте добры помочь!
-
в Cobalt © (19.09.11 07:51) [11] конкретно ПОМОЩЬ, что нужно чтобы решить проблему. или иди на форум телепатов.
> Если по возможностям эта библиотека соответствует вообще-то она не соответствует. "функциональности" в indy больше, пусть и не всегда работающей, а синапс стабильнее т.к. все что там есть работает, а того чего нет нужно писать самому и "валить на разрабов" в этом случае не получится.
-
[11] - это понятно. Но как мне это должно было помочь в написании какого- дополнительного кода? Это все равно что писать сочинение не прочитав книгу! Значит (например) если нужен еще один какой нибудь компнент, то я сам должен догадатся КАКОЙ ЖЕ ЭТО КОМПОНЕНТ, и перебирать всю палитру компонентов... Так что-ли??? А по поводу соответствует/не соответствует все претензии сюда: http://www.interface.ru/home.asp?artId=22206Я лишь процитировал!!! А раз все что там есть работает, почему НЕ РАБОТАЕТ то, что там есть??? Дайте тогда ссылки, где об этом подробнее написано, я не нашел, что бы мне реально помогло!
-
> то я сам должен догадатся КАКОЙ ЖЕ ЭТО КОМПОНЕНТ 1 твоя же претензия > А что, трудно недогадатся что-ли идти пошагово? т.е. от нас ты ждешь что догадаются что ты знаешь/сделал а что нет, а вот к себе того же не приемлеш...
2 проблема как говоришь с синапсе, нам что догадаться какой компонент ты используешь и как? (опять что то знакомое...)
> Я лишь процитировал!!! цитата без указания источника не цитата... я вот лишь поделился собственными наблюдениями. и ссылок дать не могу.
> А раз все что там есть работает, почему НЕ РАБОТАЕТ то, что там есть??? с чего взял, что оно там есть и не работает?
> не нашел, что бы мне реально помогло! реально бы помогло если бы ты следовал советам тех у кого спрашиваешь, (все тоже [11]) здесь помогло. а вот скандалить, врать, скрывать инфу, выдвигать потребительские претензии, указывать отвечающим как и что отвечать точно не помогает, проверено временем.
-
>> Или в Synapse проблемы с js-скриптами??? > стоит ли отвечать, вот в чем вопрос... проверим. ни в Synapse ни в Indy нет проблем с js-скриптами... нет скриптов и нет с ними проблем значится...
-
[11] НИКАК НЕ ПОМОГ В СЛЕДУЮЩЕМ: Надо использовать не IdHTTP1.URL.URI, а Location того же IdHTTP1 и обрабатывать каждый редирект до тех пор, пока не возвратит нужные параметры. Неужели это так трудно было написать??? И [11] мне НИКАК НЕ ПОМОГ ! ! ! --- А что, в synapse разве еще что-то есть, что используется для сабжа, кроме HTTPSend? > ни в Synapse ни в Indy нет проблем с js-скриптами... нет скриптов и нет с ними проблем значится... Как это нет скриптов? Я делаю авторизацию на сайте vkontakte.ru, как это видно по коду ранее [5]. На страницах сайта есть js-скрипт с функциями установки Cookie. Судя по содержимому эта функция устанавливает кукисы, начинающиеся с "remix" (например remixsid). Но Synapse почему-то отказывается выполнять эту функцию, потому в кукисах нет тех имен, которые устанавливает эта функция из js-скрипта (нету кукиса с именем remixsid). Да, мож я что не так делаю, но вот что именно!? Код авторизации на Synapse нужен?
-
> Как это нет скриптов?
Да вот так) Нет их.Совсем нет. Вообще нет)
-
Скрипт можно увидеть в исходном коде страницы, если перейти по адресу одной из переадресаций: http://vkontakte.ru/login.php?act=slogin--- Код скрипта:
<script type="text/javascript">
var _ua = navigator.userAgent;
var locDomain = 'vkontakte.ru'.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0];
if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain)
function setCookieEx(n, v, s)
var cks = ['mid', 'sid', 'gid', 'email', 'pass']; for (var i in cks)
parent.onLoginFailed(0);
</script>
-
> Тихон (26.09.11 20:14) [22]
Да мало ли что там еще можно увидеть)
Речь идет об TIdHTTP и THTTPSend, которые не исполняют JS-скрипты, ибо такая возможность в них попросту не реализована. Вообще не реализована. Совсем не реализована.
-
Почему ТОГДА TidHTTP исполняет этот скрипт???
> Да мало ли что там еще можно увидеть)
И что там еще можно увидеть???? Расскажи, мне оч интересно! А если так, как ты говоришь, то тогда вообще Indy, Synapse можно постовить под сомнение...
-
> Почему ТОГДА TidHTTP исполняет этот скрипт?
Ничего он не исполняет, не болтай ерундой) > тогда вообще Indy, Synapse можно постовить под сомнение
Это с какого же перепугу ? У HTTP-компонентов в обеих упомянутых библ-ках иные задачи - поддержка прикладного транспортного слоя, а именно HTTP. До HTML же, к коему имеют прямое отношение скрипты, им дела нет - этим слоем занимаются интерпретаторы скриптов. Вот тут http://www.delphimaster.net/view/2-1271459822/allодин товарищ воевал с граблями чуть пораньше тебя, почитай внимательно дискуссию.
-
Даже и не подумаю открывать!!! Мне то, что там написано и НЕ НАДО. Ты внимательно читай то, о чем я спрашиваю! И не надо юлить вокруг да около. Какое мне дело до твоих интерпретаторов скриптов и при чем тут они!? И ваши советы тоже УЖЕ НЕ НУЖНЫ и НИКАК НЕ ПОМОГЛИ (ОСОБЕННО [11])! Два слова не могли написать, и больше ничего не нужно было! --- Обращайся после этого на форумы...
-
> Ты внимательно читай то, о чем я спрашиваю
Я-то внимательно читаю) И вижу в [13] и [20]
в Synapse проблемы с js-скриптами? > Synapse почему-то отказывается выполнять эту функцию
На что ты получил вразумительный ответ - в Синапсе, как и в Инди, нет никаких проблем с js-скриптами, потому что он, как и Инди, никакие скрипты не выполняет вообще.
А почему у тебя там авторизация не выполняется - это мне фиолетово, и это не проблема ни Синапса ни Инди.
Единственное чем заметно разнятся синапсов и индейский http-клиенты - это то что индейский клиент позволяет при необходимости обрабатывать редиректы автоматически, в то время при использовании синапсового клиента обрабатывать редиректы следует ручками.
> Какое мне дело до твоих интерпретаторов скриптов и при чем > тут они!?
Ты действительно идиот или прикидываешься ?)
Ты же сам что-то там про кукиши говорил, которые якобы формируются в результате именно выполнения какого-то там скрипта.
А т еперь следи за мыслью:
JS-cкрипты кто исполняет ? JS-интерпретатор и никто более. Интерпретаторы JS-скриптов есть в Инди и в Синапсе ? Нет их там.
Возражение есть ? Возражений нет)
-
Топикстартер, спасибо за интересную ссылку на OAuth поковыряюсь на досуге :-)
-
ТРУДНО БЫЛО ПРОСТО НАПИСАТЬ ПРИМЕРНО СЛЕДУЮЩЕЕ??? "Надо сделать запрос авторизации и обрабатывать редиректы в ручную, т.е. снова послать запрос на ссылку предыдущего редиректа... и так до тех пор пока не получишь то, что тебе надо!" И ВСЁ! Ничего больше не надо было! И КАК ТВОИ ИНТЕРПРЕТАТОРЫ МНЕ ПОМОГУТ В ЭТОМ, А? ? ? И мне дела нет до того, кто их исполняет. А если не знаешь ответ ГЛАВНЫЙ вопрос, то так и скажи, что не знаете, и не надо цеплятся за последующие вопросы ради того, чтобы показать себя умным и обвинять меня в тупости. Я спрашивал про авторизацию вконтакте, а не про интерпретарор js-скриптов и кто и как их исполняет!!! Пример: Ты пишешь программы на Delphi и тебе не важно как и что он делает с твоим кодом, чтобы получить exe-шник. Для тебя главное конечный Результат твоей программы!
-
да уж, как знал. не надо было отвечать... до него так и не дошло.
> ТРУДНО БЫЛО ПРОСТО НАПИСАТЬ ПРИМЕРНО СЛЕДУЮЩЕЕ??? без раскрытия вопроса (по подсказке в [11]) НЕВОЗМОЖНО. на абстрактные, или не озвученные (существующие только в голове автора) вообще очень трудно отвечать... впрочем форум телепатов тоже предлагался.
> И ВСЁ! Ничего больше не надо было! ну это вы батенька соврамщи... отвечал то я, хоть и сомневался стоит ли, на вполне конкретный, тобой заданный вопрос - > Или в Synapse проблемы с js-скриптами??? нужно было тогда подписывать типа "вопрос задан но отвечать на него не нужно"...
> Обращайся после этого на форумы... совет. иди в следующий раз на форум к философам... они к словам по идее должны философски относится... типа, "ну мало ли, что сказано одно, но имелось то в виду другое". или, "ну что что вопроса как такового нет. и никто не понимает что нужно, но ведь мне ОЧЕНЬ нужно...". с программистами такое "не катит".
|