Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обработка входов через OAuth в TWebBrowser без локальной навигации

Delphi , Интернет и Сети , Браузер

При реализации входа через OAuth 2.0 в приложениях на Pascal, таких как Delphi, важно уметь корректно обрабатывать события, связанные с перенаправлением в браузере. В рамках данной статьи мы рассмотрим, как можно отследить перенаправление на стороне сервера внутри компонента TWebBrowser, что позволит обработать данные из URL и избежать локальной навигации.

Проблема

Пользователь столкнулся с проблемой при реализации входа через OAuth 2.0: сервер осуществляет перенаправление на URL, содержащий необходимые данные (http://localhost/?code=abcdef), но событие TWebBrowser.BeforeNavigate2 в этом случае не срабатывает. Это затрудняет возможность самостоятельной обработки перенаправления и анализа данных URL.

Решение

В стандартной конфигурации TWebBrowser не предусмотрено срабатывание события для перенаправления. Вместо этого, событие OnBeforeNavigate2 активируется для начального URL перед перенаправлением, а затем OnNavigateComplete - после завершения перенаправления. Для определения факта перенаправления можно сравнить URL, предоставляемые этими событиями.

Однако, если включить флаг DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION в браузере, то событие OnBeforeNavigate2 начнет срабатывать и при перенаправлении, позволяя отменить его при необходимости.

Для включения этого флага необходимо реализовать интерфейс IDocHostUIHandler и его метод GetHostInfo(). Если используется версия Delphi 10.0 Seattle или новее, TWebBrowser уже реализует IDocHostUIHandler, и достаточно унаследовать его и переопределить метод GetHostInfo() по необходимости.

Для более старых версий Delphi можно создать отдельный класс, реализующий IDocHostUIHandler, и затем запросить у браузера интерфейс ICustomDoc, чтобы вызвать метод SetUIHandler().

Пример кода

type
  TCustomWebBrowser = class(TWebBrowser, IDocHostUIHandler)
  private
    function GetHostInfo: HRESULT; override;
  end;

implementation

function TCustomWebBrowser.GetHostInfo: HRESULT;
begin
  Result := S_OK;
  // Здесь может быть дополнительная логика
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TCustomWebBrowser.Create(nil) do
    try
      // Настройка компонента
      Parent := Form1;
      Align := alClient;
      // Включение необходимых событий
      OnBeforeNavigate := OnBeforeNavigateBrowser;
    finally
      Free;
    end;
end;

procedure TForm1.OnBeforeNavigateBrowser(Sender: TObject; var SB: TWebBrowserBeforeNavigate2;
  var Cancel: Boolean);
begin
  if SB.Type = NAVIGATE_TYPE_Frame then
  begin
    // Обработка перенаправления
    Cancel := True; // Отмена перенаправления
    // Здесь можно обработать данные из URL
  end;
end;

Заключение

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

Создано по материалам из источника по ссылке.

При использовании TWebBrowser для входа через OAuth 2.0 в приложениях на Pascal, необходимо корректно обрабатывать перенаправления, чтобы избежать локальной навигации и анализировать данные из URL.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:44:12/0.0036790370941162/0