purebasic.info

PureBasic forum
Текущее время: Вс ноя 19, 2017 11:32 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Неправильно работает WebGadget
СообщениеДобавлено: Ср апр 19, 2017 11:52 pm 
Не в сети
ассистент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 19
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
ниже приведённый код работает нормально в pureBasic 5.31, но неправильно работает в PureBasic 5.60
суть- при редиректе на другую страницу, не возвращает url той страницы, а возвращает url который был введен.
эта функция производит авторизацию vkontakte, соответственно на последней странице в url возвращается access token и всякая другая инфа.
очень испугался, когда скомпилил свою прогу на новом пурике, и не сразу догнал в чем дело, весь вечер материл создателей контакта, что они что-то поменяли, а нет...

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
 
Global accessToken.s
Global expiresIn.i
Global  myId.i
 
Procedure VK_SignIn(AppID.i, AuthWindowTitle.s, Visible.i = #True,Redirect_uri.s = "https://oauth.vk.com/blank.html", Display.s = "mobile", Response_type.s = "token")
    #authForm = 900 ; хэндл окна
    #web = 901 ; хэндл web контрола
#authFormTitle = "Авторизация"
        Protected OAuth_url.s = "https://oauth.vk.com/authorize?client_id=" + Str(AppID) + "&scope=wall&display=" + Display + "&redirect_uri=" + Redirect_uri + "&response_type=" + Response_type ; полный url для авторизации в контакте
Protected VisibleFlag = #False
If Visible
VisibleFlag = #False
Else
VisibleFlag = #PB_Window_Invisible
EndIf
OpenWindow(#authForm,0,0,640,480,AuthWindowTitle, VisibleFlag)
WebGadget(#web,0,0,600,440,OAuth_url)
; далее идет костыль для подгрузки интерфейса браузера
; при помощи этого интерфейса мы реализуем нормальную передачу событий навигации по странице, tab и shift+tab
Protected WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(#web), #GWL_USERDATA)
CoCreateInstance_(?CLSID_IOleInPlaceActiveObject,0,1,?IID_IOleInPlaceActiveObject,@OleObject.IOleInPlaceActiveObject)
WebObject\QueryInterface(?IID_IOleInPlaceActiveObject, @OleObject)
Protected web.MSG
WebObject\put_Silent(#True)
Repeat
Protected event = WaitWindowEvent()
If Event = #WM_KEYDOWN ; ещё один костыль обработки событий от web
 web\message = Event
web\wParam = EventwParam()
web\lParam = EventlParam()
OleObject\TranslateAccelerator(@web) ; транслируем клавиши быстрого доступа
EndIf
 
Protected webEventType = EventType()
If webEventType = #PB_EventType_TitleChange ; если изменился заголовок html документа
If GetGadgetItemText(#web,#PB_Web_PageTitle) = "OAuth Blank" ; если  заголовок документа "OAuth Blank", значит мы перенаправлены на страницу, сообщающую нам о удачной или неудачной авторизации
Protected waitingUrl.s = GetGadgetText(#web) ; получим url который вернул нам сервер, в его параметрах содержится информация о авторизации
waitingUrl = ReplaceString(waitingUrl,"#","?") ; обязательная замена, иначе, GetUrlPart не будет правильно работать
Debug waitingUrl
If FindString(waitingUrl,"?error=access_denied") > 0 ; если ошибка доступа
OleObject\Release()      
CloseWindow(#authForm)
MessageRequester("ошибка","доступ запрещен. пользователь не дал приложению доступ к функциям api")
ProcedureReturn #False
EndIf
 
  If FindString(waitingUrl,"?access_token=") > 0 ; если есть access token
accessToken = GetURLPart(waitingUrl,"access_token") ; скопируем ключ доступа к api
expiresIn = Val(GetURLPart(waitingUrl,"expires_in")) ; скопируем время жизни ключа
myId = Val(GetURLPart(waitingUrl,"user_id")) ; скопируем свой user id
EndIf
 
event = #PB_Event_CloseWindow
    EndIf
EndIf  
Until event = #PB_Event_CloseWindow
Debug expiresIn
OleObject\Release()
CloseWindow(#authForm)
If accessToken = ""
MessageRequester("ошибка","непредвиденная ошибка. отсутствует access token, или нет такой страницы, или неверный id приложения")
ProcedureReturn #False
EndIf
ProcedureReturn #True
DataSection ; ну а это clsid и iid для костыля
;{00000117-0000-0000-C000-000000000046}
IID_IOleInPlaceActiveObject:
Data.l $00000117
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
 
;{00000320-0000-0000-C000-000000000046}
CLSID_IOleInPlaceActiveObject:
Data.l $00000320
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
EndDataSection
EndProcedure  
 
VK_SignIn(1,"test auth")
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Неправильно работает WebGadget
СообщениеДобавлено: Чт апр 20, 2017 1:07 pm 
Не в сети
док

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 183
Благодарил (а): 7 раз.
Поблагодарили: 23 раз.
Пункты репутации: 0
Не имею возможности проверить в 5.60, но, контакт очень любит блокировать частую авторизацию.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Неправильно работает WebGadget
СообщениеДобавлено: Пт апр 21, 2017 1:31 pm 
Не в сети
ассистент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 19
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
repeat писал(а):
Не имею возможности проверить в 5.60, но, контакт очень любит блокировать частую авторизацию.


так тут не в контакте дело, пример реально работает на старом пурике, а на новом не обновляется url. загружается нужная мне страница, на которой сообщается чтобы я не сообщал ни кому свой токен или как-то так, но в Url попрежнему висит та ссылка которой я делал запрос.
тут надо на оф форум писать, к сожалению плохо пишу по-инглишу, пущай сами запустят этот пример и проверят.
согласен частая авторизация может стать причиной блокировки но не увсех и сразу!
а если честно, не наблюдал такого, когда тестил прогу, приходилось по 50 раз на дню авторизоввываться, то там бага, то там и всё норм.
ещё есть navigation callback, может с ним нормально прокатит, но почему данный способ сломался, очень хочется выяснить. можно и winapi юзнуть, много чего можно, но тут уже принцип, штатная процедура нормально отрабатывала, а теперь нет.
плиз, по возможности донести проблему до разработчика.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB