Всем, добрый день,
Хочу сделать кнопку logout.
Для http запросов использую NetHttpClient, авторизация на OnAuthEvent. Во время работы приложения передаю куки от NetHttpClient в браузер кодом:
procedure
{$IFDEF ANDROID}
var
CookieSyncManager: JCookieSyncManager;
CookieManager : JCookieManager;
Cookie: TCookie;
{$ENDIF}
Begin
{$IFDEF ANDROID}
if High(NetHTTPClient1.CookieManager.Cookies) >= 0 then
begin
Cookie := NetHTTPClient1.CookieManager.Cookies[0];
CookieSyncManager := TJCookieSyncManager.JavaClass.createInstance(TAndroidHelper.Context);
CookieManager := TJCookieManager.JavaClass.getInstance;
CookieManager.setAcceptCookie(True);
CookieManager.setCookie(StringToJString(BaseURL), StringToJString(Cookie.ToString));
CookieSyncManager.sync();
end;
{$ENDIF}
end;
Очищаю следующим образом:
procedure TNetModule.LogOut;
{$IFDEF ANDROID}
var
CookieSyncManager: JCookieSyncManager;
CookieManager : JCookieManager;
//NeedSync: Boolean;
{$ENDIF}
begin
// очистить куки ?
NetModule.NetHTTPClient1.CredentialsStorage.ClearCredentials;
NetHTTPClient1.CookieManager.DeleteCookies;
{$IFDEF ANDROID}
CookieSyncManager := TJCookieSyncManager.JavaClass.createInstance(TAndroidHelper.Context);
CookieManager := TJCookieManager.JavaClass.getInstance;
CookieManager.setAcceptCookie(False);
if TJBuild_VERSION.JavaClass.SDK_INT < 21 then
CookieManager.removeAllCookie()
else
CookieManager.removeAllCookies(nil);
CookieSyncManager.Sync();
{$ENDIF}
LoginForm.Show;
end;
DeleteCookies выполняется с помощью хелпера:
// interface
TCookieManagerHelper = class helper for TCookieManager
procedure DeleteCookies;
end;
// implementation
procedure TCookieManagerHelper.DeleteCookies;
begin
with Self do
FCookies.Clear;
end;
Но при новой авторизации событие OnAuthEvent не срабатывает, следовательно можно зайти и вовсе без пароля. Использую Delphi 10.2.2. Проверял на Android 8.0 и 5.0. Кто-нибудь сталкивался с таким?
ps iPhone тоже есть такая проблема, но хотя бы здесь разобраться.