Author Topic: Ajax Login und Logout Weiterleitung?  (Read 17369 times)

Offline rundkubus

  • Jr. Member
  • **
  • Posts: 12
Ajax Login und Logout Weiterleitung?
« Reply #15 on: January 01, 2010, 12:38:34 PM »
@ rosali
Frohes Neues! :)

Danke fuer die Info. Ist es den moeglich die Funktion login_page() nur auszufuehren,
wenn zuvor mit $_POST[ajax] eingeloggt wurde?
Also das wir eine entspr. Session Var benutzen um das zu checken?

Offline rosali

  • Hero Member
  • *****
  • Posts: 2,533
Ajax Login und Logout Weiterleitung?
« Reply #16 on: January 02, 2010, 12:41:53 AM »
Mit einer Session Variable dürfte es nicht gehen, da die Session ja nicht mehr zur Verfügung steht, wenn ein Timeout erfolgte. Es müsste aber mit einem Cookie gehen.
Regards,
Rosali
__________________
MyRoundcube Project (commercial)

Offline rosali

  • Hero Member
  • *****
  • Posts: 2,533
Ajax Login und Logout Weiterleitung?
« Reply #17 on: January 02, 2010, 12:48:18 AM »

<?php
/**
 * Redirect on logout / optionally lock login page
 *
 * @version 1.0 - 31.12.2009
 * @author 'rosali'
 * @website http://myroundcube.googlecode.com
 * @licence GNU GPL
 *
 **/
 
/** USAGE
 *
 * #1- Copy "logout_redirect/config/config.inc.php.dist" to "config.inc.php"
 * #2- Configure "logout_redirect/config/config.inc.php".
 * #3- Register plugin ("./config/main.inc.php ::: $rcmail_config['plugins']").
 *
 **/
 
class logout_redirect extends rcube_plugin
{
  private 
$msg 'loggedout';

  function 
init()
  {
    if(
file_exists("./plugins/logout_redirect/config/config.inc.php"))
      
$this->load_config('config/config.inc.php');
    else
      
$this->load_config('config/config.inc.php.dist');         
  
    
$this->add_hook('render_page', array($this'login_page'));
    
$this->add_hook('login_after', array($this,'login_after'));
    
$this->add_hook('logout_after', array($this,'logout_after'));
  }
  
  function 
login_after($args)
  {
    if(!empty(
$_POST['ajax']))
      
setcookie ('ajax_login',1,time()+60*60*24*365);
    else
      
setcookie ('ajax_login','',time()-3600);
    return 
$args;
  }
  
  function 
login_page($p)
  {
    
$rcmail rcmail::get_instance();  
    if(
$p['template'] == 'login' && $rcmail->config->get('lock_login_page') == TRUE && $_COOKIE['ajax_login'] == 1){
      
$this->msg 'sessionerror';
      
header("Location: " $rcmail->config->get('logout_redirect_url') . "?msg=" urlencode(rcube_label($this->msg)));
      exit;
    }
    
setcookie ('ajax_login','',time()-3600);
    return 
$p;
  }

  function 
logout_after($args)
  {
    
$rcmail rcmail::get_instance();  
    
header("Location: " $rcmail->config->get('logout_redirect_url') . "?msg=" urlencode(rcube_label($this->msg)));
    return 
$args;
  }
}
?>
Regards,
Rosali
__________________
MyRoundcube Project (commercial)

Offline rundkubus

  • Jr. Member
  • **
  • Posts: 12
Ajax Login und Logout Weiterleitung?
« Reply #18 on: January 02, 2010, 09:48:38 AM »
@ Rosali

NACHTRAG:
--------------------------
ich hätte erstmal richtig testen sollen. :) ... es funktioniert fast:
Denn bei einem manuellen Ajax Logout greift "login_page()=>auto" zuerst statt "logout_after()=>user",
was ja in meinem Fall falsch ist, da login_page() _nur_ bei einem Timeout greifen soll.
--------------------------

VIELEN HERZLICHEN DANK fuer Deinen Code, es funktioniert! :)

Ich habe das wie folgt fuer mich geaendert...
- $msg entfernt und user/auto direkt in header() gesetzt
- login_page() if abfrage um !$_POST['ajax'] erweitert
- logout_after() if abfrage mit $_COOKIE['ajax_login']==1 hinzugefuegt
- login_page() "lock_login_page==true" auf if abfrage auskommentiert


<?php 
/** 
 * Redirect on logout / optionally lock login page 
 * 
 * @version 1.0 - 31.12.2009 
 * @author 'rosali' 
 * @website http://myroundcube.googlecode.com 
 * @licence GNU GPL 
 * 
 **/ 
  
/** USAGE 
 * 
 * #1- Copy "logout_redirect/config/config.inc.php.dist" to "config.inc.php" 
 * #2- Configure "logout_redirect/config/config.inc.php". 
 * #3- Register plugin ("./config/main.inc.php ::: $rcmail_config['plugins']"). 
 * 
 **/ 
  
class logout_redirect extends rcube_plugin 

  function 
init() 
  { 
    if(
file_exists("./plugins/logout_redirect/config/config.inc.php"))
      
$this->load_config('config/config.inc.php');
    else 
      
$this->load_config('config/config.inc.php.dist');
    
    
$this->add_hook('render_page', array($this'login_page')); 
    
$this->add_hook('login_after', array($this,'login_after')); 
    
$this->add_hook('logout_after', array($this,'logout_after'));
  } 
   
  function 
login_after($args
  { 
    if(!empty(
$_POST['ajax'])) 
      
setcookie ('ajax_login',1,time()+60*60*24*365); 
    else 
      
setcookie ('ajax_login','',time()-3600); 
    return 
$args
  } 
   
  function 
login_page($p
  { 
    
$rcmail rcmail::get_instance();   
    if(
$p['template'] == 'login' && !$_POST['ajax'] && $_COOKIE['ajax_login'] == 1){ // && $rcmail->config->get('lock_login_page') == TRUE
	
	
setcookie ('ajax_login','',time()-3600); 
	
	
header("Location: " $rcmail->config->get('logout_redirect_url') . 'auto'); 
      exit; 
    } 
    return 
$p
  } 

  function 
logout_after($args
  { 
    
$rcmail rcmail::get_instance();
    if (
$_COOKIE['ajax_login'] == 1)
    
	
header("Location: " $rcmail->config->get('logout_redirect_url') . 'user'); 
    return 
$args
  } 

?>
« Last Edit: January 02, 2010, 10:03:07 AM by rundkubus »

Offline rosali

  • Hero Member
  • *****
  • Posts: 2,533
Ajax Login und Logout Weiterleitung?
« Reply #19 on: January 02, 2010, 02:00:09 PM »
Was meinst Du mit "manuellem AJAX Logout"?
Regards,
Rosali
__________________
MyRoundcube Project (commercial)

Offline rundkubus

  • Jr. Member
  • **
  • Posts: 12
Ajax Login und Logout Weiterleitung?
« Reply #20 on: January 02, 2010, 03:00:19 PM »
Wenn man sich via Ajax Form eingelogt (mit cookie[ajax_login]) und in Roundcube oben rechts auf den Logout-Link klickt, erfolgt der Logout ja "manuell" (statt automatisch aufgrund eines Inaktivitaet Timeouts).

Offline rosali

  • Hero Member
  • *****
  • Posts: 2,533
Ajax Login und Logout Weiterleitung?
« Reply #21 on: January 02, 2010, 03:13:49 PM »
OK ...

Dann geht das eben alles innerhalb 'login_page' mit einem Check $rcmail->task == "logout" ... Probier ich morgen ... außer Du bist scheller ;)
Regards,
Rosali
__________________
MyRoundcube Project (commercial)

Offline rosali

  • Hero Member
  • *****
  • Posts: 2,533
Ajax Login und Logout Weiterleitung?
« Reply #22 on: January 02, 2010, 03:49:32 PM »
Hoffentlich diesesmal ...


<?php
/**
 * Redirect on logout / optionally lock login page
 *
 * @version 1.0 - 31.12.2009
 * @author Roland 'rosali' Liebl
 * @website http://myroundcube.googlecode.com
 * @licence GNU GPL
 *
 **/
 
/** USAGE
 *
 * #1- Copy "logout_redirect/config/config.inc.php.dist" to "config.inc.php"
 * #2- Configure "logout_redirect/config/config.inc.php".
 * #3- Register plugin ("./config/main.inc.php ::: $rcmail_config['plugins']").
 *
 **/
 
class logout_redirect extends rcube_plugin
{
  private 
$msg 'sessionerror';

  function 
init()
  {
    if(
file_exists("./plugins/logout_redirect/config/config.inc.php"))
      
$this->load_config('config/config.inc.php');
    else
      
$this->load_config('config/config.inc.php.dist');         
  
    
$this->add_hook('render_page', array($this'login_page'));
    
$this->add_hook('login_after', array($this,'login_after'));
    
$this->add_hook('kill_session', array($this,'kill_session'));
  }
  
  function 
login_after($args)
  {
    if(!empty(
$_POST['ajax']))
      
setcookie ('ajax_login',1,time()+60*60*24*365);
    else
      
setcookie ('ajax_login','',time()-3600);
    return 
$args;
  }
  
  function 
kill_session($args)
  {      
    if(
$_COOKIE['ajax_login'] == 1){
      
setcookie ('ajax_login','',time()-3600);    
      
$this->msg 'loggedout';
      
$rcmail rcmail::get_instance();
      
header("Location: " $rcmail->config->get('logout_redirect_url') . "msg=" urlencode(rcube_label($this->msg)));
      exit;    
    }
        
    return 
$args;
  }
  
  function 
login_page($p)
  {   
    if(
$p['template'] == 'login' && $_COOKIE['ajax_login'] == 1){  
      
setcookie ('ajax_login','',time()-3600);
      
$rcmail rcmail::get_instance();           
      
header("Location: " $rcmail->config->get('logout_redirect_url') . "msg=" urlencode(rcube_label($this->msg)));
      exit;
    }

    return 
$p;
  }
}
?>
Regards,
Rosali
__________________
MyRoundcube Project (commercial)

Offline rundkubus

  • Jr. Member
  • **
  • Posts: 12
Ajax Login und Logout Weiterleitung?
« Reply #23 on: January 02, 2010, 04:08:19 PM »
@ rosali

WOW, Du bist der Hammer. Nach ersten Tests sieht das super aus. Danke!
Ich kann mich via eigenem-Ajax und normalem-Loginform einloggen und alles leitet nun genauso zurueck wie es gedacht war.
Ich hätte das allein nie hinbekommen. ;)

NACHTRAG: Hier meine Version...
(hoffe Du bist nicht boese wegen meiner Reduktion aufs wesentliche)

<?php 
/** 
 * Redirect on logout (if ajax login)
 * 
 * @version 1.1 - 02.01.2010 
 * @author Roland 'rosali' Liebl 
 * @website http://myroundcube.googlecode.com 
 * @licence GNU GPL 
 * 
 **/ 
  
class logout_redirect extends rcube_plugin 
{
	
function 
init()
	
{
	
	
$this->add_hook('render_page', array($this,'login_page')); 
	
	
$this->add_hook('login_after', array($this,'login_after')); 
	
	
$this->add_hook('kill_session', array($this,'kill_session')); 
	

	

	
function 
goto_url($v)
	

	
	
setcookie ('ajax_login','',time()-3600);
	
	
header('Location: http://domain123.net?log=' $v);
	
	
exit;
	

	

	
// ajax cookie
	
function 
login_after($args
	

	
	
if (!empty(
$_POST['ajax'])) 
	
	
	
setcookie ('ajax_login',1,time()+60*60*24*365); 
	
	
else 
	
	
	
setcookie ('ajax_login','',time()-3600); 
	
	
return 
$args
	

	

	
// user logout
	
function 
kill_session($args
	
{       
	
	
if (
$_COOKIE['ajax_login'] == 1)
	
	
	
$this->goto_url('user');
	
	
return 
$args;
	
}
	

	
// auto logout (session errror)
	
function 
login_page($p
	
{    
	
	
if (
$_COOKIE['ajax_login'] == && $p['template'] == 'login')
	
	
	
$this->goto_url('auto');
	
	
return 
$p;
	
}

?>
« Last Edit: January 02, 2010, 04:49:33 PM by rundkubus »

Offline rosali

  • Hero Member
  • *****
  • Posts: 2,533
Ajax Login und Logout Weiterleitung?
« Reply #24 on: January 03, 2010, 01:34:32 AM »
Bis auf die hart kodierte URL werde ich Deine Änderungen übernehmen. Die Benutzer meiner Plugins sind es nicht gewöhnt in der plugin.php zu editieren.
Regards,
Rosali
__________________
MyRoundcube Project (commercial)