Roundcube Community Forum

 

Ajax Login und Logout Weiterleitung?

Started by rundkubus, December 08, 2009, 03:22:42 PM

Previous topic - Next topic

rundkubus

Hallo,

ich würde mich über Hilfe bei folgenden Fragen freuen...

1)
Wie kann man sich aus externer Seite via AJAX einloggen?
Ich möchte gerne via jQuery ein Form-Loginaufruf senden
und sowas wie true|false von Roundcube zurück erhalten.
Wenn "true" wird zur Roundcube URL weitergeleitet,
wenn "false" gebe ich in meinem externen Form einen Fehler aus.

2)
Wie kann man beim Logout direkt auf eine andere Seite umleiten,
statt zum Rundcube eigenem Loginfenster?
JavaScript window.location oder HTML hacks finde ich blöd. ;)

Besten Dank vorab,
Gruss Rundkubus

rosali

Zu 1)
true|false bekommst Du nicht zurück. Du kannst aber in [roundcube]/index.php posten und sehen was bei erfolgreichem bzw. nicht erfolgreichem Login als HTML-Output zurückgegeben wird. Erforderliche Values sind _user, _pass, _host.

Zu 2)
Das geht ganz leicht mit einem Plugin. Siehe Hook 'logout_after'.
Regards,
Rosali

rundkubus

@ rosali
super, vielen Dank für Deine Tipps.

rosali

Gern geschehen ... nochmal zu 1)

Natürlich kannst Du auch das gewünschte Return beim Login über einen Plugin Hook erzeugen, wenn Du dem AJAX Post z.B. ajax=1 mitgibst und dann im Hook 'login_after' über !empty($_POST['ajax']) verzweigst.

Es wäre auch möglich, den Hook 'login_failed' zu benutzen.
Regards,
Rosali

rundkubus

@ rosali
ahh herrlich, werde ich so machen.
Besten Dank und schonmal angenehme Feiertage. :)

rundkubus

@ rosali

Der Ajax Login klappt :), jedoch bin ich wohl zu bloed um den logout_after hook
zum laufen zu bekommen (das Plugin steht jedenfalls in /config/main.inc.php)...

Quoteclass logout_redirect extends rcube_plugin
{
   public $task = 'logout';
   
   function init()
   {
      $this->add_hook('logout_after', array($this,'jumpto'));
   }
   
   function jumpto($args)
   {
      header("Location: http://domain.net");
      return null;
   }
}

...Roundcube loggt sich ganz normal aus, ohne obiges zu beachten.
Was mache ich denn falsch?

Danke vorab,
Gruss Rundkubus

rosali


<?php
class logout_redirect extends rcube_plugin
{
public 
$task 'logout';

function 
init()
{
$this->add_hook('logout_after', array($this,'jumpto'));
}

function 
jumpto($args)
{
header("Location: http://google.com");
return 
$args;
}
}
?>
Regards,
Rosali

rundkubus

@ rosali

ich habe Deinen Code 1zu1 uebernommen (siehe http://www.ssl.mynetcologne.de/screen.png) aber der logout leitet trotzdem zu!?...
/index.php?_task=logout

Ich benutze roundcube 0.31

rosali

Bei mir funzt es. Ich habe es gerade nochmal überprüft. Im Gegensatz zu Dir benutze ich die aktuelle SVN version (Roundcube Webmail). Also liegt es m.E. entweder an der Version oder Du hast ein anderes Plugin aktiviert, das den logout_after hook benutzt.

Wenn ich das folgende frage, komme ich mir immer etwas blöd vor, da ich ja nicht weiss, ob ich einen Newbie, einen Semi-Professional oder einen Advanced User anspreche:

Hast Du das plugin wirklich auch richtig registriert?

$rcmail_config['plugins'] = array(
  "logout_redirect",
  ... alle anderen Plugins
);
Regards,
Rosali

rundkubus

@ rosali

oh man, weil ich nicht richtig nachgelesen habe, wusste ich nicht das plugin-ordner, start-script und class _identisch_ betitelt sein muessen! :|
Danke fuer den Hinweis, jetzt gehts super! :)

Sorry fuer den Heckmeck,
Gruss rundkubus

rundkubus

#10
@ rosali

Besten Dank fuer Deinen super Einsatz! :)

Eine kleine Frage habe ich noch, wie kann ich feststellen ob der Logout vom User
manuell oder vom System automatisch (aufgrund eines Timeouts) vollzogen wurde?

Das wuerde ich gerne in der redirect-url domain/?log=xxx mitgeben.
xxx = "user" _oder_ "auto"

rosali

Ich gehe davon aus, dass Deine User die Roundcube Login Page niemals zu Gesicht bekommen sollen.

Wenn das richtig ist, dann benutze das anhängende Plugin.
Regards,
Rosali

rosali

Könntest Du bitte Dein AJAX Login Script posten?
Regards,
Rosali

rundkubus

#13
@ rosali

Zuerst: Es sollte auch weiterhin moeglich sein, sich ueber das "normale" Loginform einzuloggen. Manche bevorzugen einen neutrales Loginform statt meine Portalseite.
Das ein Ajax Login via $_POST[ajax] in der Roundcube Session registriert und beim Logout entsprechend beachtet wird (ein Switch ob ein eigener Redirect greift oder nicht), fehlt aber noch.

Anbei eine Standalone Version des HTML/jQuery Login Scripts (muss nach .html umbenannt werden).

Frage:
Verstehe ich das richtig, das in Deinem logout_redirect.php Script bei einem Session Timeout die Funktion login_page() greift?

Gruss Rundkubus

rosali

Ich sehe keinen Hook, der bei einem Timeout benutzt werden könnte. Allerdings wird bei einem Timeout auf die Login Page umgeleitet. Insoweist ist die Antwort also "ja". Zu beachten ist aber, dass meine Methode die Login Page komplett sperrt.
Regards,
Rosali