Back to top

Autore Topic: Componente log-in automatico  (Letto 3817 volte)

Offline Caos81

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Componente log-in automatico
« il: 09 Ott 2006, 15:33:39 »
Sto cercando di creare un componente estremamente semplice e banale  :-\ che dovrebbe permettere ad un utente già loggato su un sito creato con Joomla! di "spostarsi" su un altro sito (sempre creato con Joomla!) risultando automaticamente loggato anche sul secondo.

In pratica la cosa dovrebbe essere gestita più o meno in questa maniera:
Codice: [Seleziona]
<?php
/**
* @versione 0.1
* @package ExternalLogin
* @copyright (C) 2005 Antonio Cirasole
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/

/** ensure this file is being included by a parent file */
defined'_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

// include support libraries
require_once( $mainframe->getPath'admin_html' ) );

// handle the task
$task mosGetParam$_REQUEST'task''' );

switch (
$task) {
default:
externalLogin();
break;
}

/**
 * Login su sito affiliato esterno
 */
function externalLogin() {

require_once( './globals.php' );
require_once( './configuration.php' );
require_once( './includes/joomla.php' );

global $my;

$user $my->username;
                
$pass = <ricavo opportunamente la password dal DB>

$database = new database("localhost""root""""portale""sito1_");
$mainframe = new mosMainFrame$database"login"'c:/programmi/easyphp1-8/www' );
$mainframe->initSession();
$mainframe->login($user$pass);
mosRedirect('http://localhost/sito1/index.php?option=com_comprofiler&Itemid=4');

}
?>


Se vado a vedere la tabella delle sessioni vedo che nel sito1 ho effettivamente un record relativo all'utente che ha appena effettualto il "salto" eppure navigando all'interno del sito non risulta essere loggato.

Dove sbaglio?

Offline Caos81

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Re: Componente log-in automatico
« Risposta #1 il: 10 Ott 2006, 10:48:26 »
Aiutini?

Offline napo

  • Instancabile
  • ******
  • Post: 6532
  • Sesso: Maschio
  • NO MP TECNICI, verranno ignorati
    • Mostra profilo
Re: Componente log-in automatico
« Risposta #2 il: 10 Ott 2006, 11:11:48 »
Da un sito A non puoi creare il login sul sito B, a meno di far girare la funzione externalLogin() sul sito B.

Quello che puoi fare è creare sul sito A, un form di login che punta al sito B.

--- SITO A ---
<form action="http://www.sito2.it/index.php" method="post" name="login">
    <input type="hidden" name="username" value="$my->username">
    <input type="hidden" name="passwd" value="$my->password">
    <input type="submit" name="Submit" value="Entra su B" />
</form>

Il problema è che la password è già criptata.


AllOne.it Consulting: http://www.allone.it Gens Joomla, il : http://www.gensjoomla.org  [url=http://www.allone.it/jooml

Offline Caos81

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Re: Componente log-in automatico
« Risposta #3 il: 10 Ott 2006, 21:02:34 »
Alla fine sono riuscito a fare "qualcosa".

Probabilmente è il codice "più orrendo" che sia mai stato scritto in php ma purtroppo non lo maneggio ancora con dimestichezza.
In sostanza mi sono ispirato al suggerimento di -napo- e ho creato un componente che và installato sul sito padre e quello figlio.
In sostanza appoggiandosi ad una tabella del DB "simula" il comportamento dell'array _POST salvando pass e username dell'utente che effettua il "salto di sito".

In questo modo ho potuto utilizzare la password criptata all'interno del metodo "login ($user, $encrPass, ...)" e inizializzare una nuova sessione sul sito figlio in maniera del tutto automatica.

Se a qualcuno interessa potrei postare il codice (cosa che per pudore non faccio)... Magari con l'aiuto di qualcuno potrebbe venirne fuori un componente un pelo più raffinato e riutilizzabile.

 :D

Offline surfbit

  • Instancabile
  • ******
  • Post: 7316
  • Sesso: Maschio
  • Verranno ignorati mp tecnici
    • Mostra profilo
Re: Componente log-in automatico
« Risposta #4 il: 10 Ott 2006, 21:05:06 »
Alla fine sono riuscito a fare "qualcosa".

Probabilmente è il codice "più orrendo" che sia mai stato scritto in php ma purtroppo non lo maneggio ancora con dimestichezza.
In sostanza mi sono ispirato al suggerimento di -napo- e ho creato un componente che và installato sul sito padre e quello figlio.
In sostanza appoggiandosi ad una tabella del DB "simula" il comportamento dell'array _POST salvando pass e username dell'utente che effettua il "salto di sito".

In questo modo ho potuto utilizzare la password criptata all'interno del metodo "login ($user, $encrPass, ...)" e inizializzare una nuova sessione sul sito figlio in maniera del tutto automatica.

Se a qualcuno interessa potrei postare il codice (cosa che per pudore non faccio)... Magari con l'aiuto di qualcuno potrebbe venirne fuori un componente un pelo più raffinato e riutilizzabile.

 :D

Posta posta, questo è lo spirito del forum  ;)
A volte basta un sorriso per far felice una persona.

La guida alla scelta dell'hosting per Joomla!  Joomlaspace.it: l'hosting per Joomla

Offline Caos81

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Re: Componente log-in automatico
« Risposta #5 il: 11 Ott 2006, 18:01:42 »
Banalmente il codice prodotto è il seguente:
Codice: [Seleziona]
<?php
/**
* @version 0.1
* @package ExternalLogin
* @copyright (C) 2006 Antonio Cirasole
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/

/** ensure this file is being included by a parent file */
defined'_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );


// handle the task
$task mosGetParam$_REQUEST'task''' );

switch (
$task
{
case 'setup':
switchSetup();
break;

default:
externalInitSession();
break;
}

/**
 * Effettua il setup per il reindirizzamento alla pagina del profilo
 */
function switchSetup () 
{

global $my$database;

if (!$database)
{
mosErrorAlert'Errore di connessione con il database!');
}
// Salvo i dati necessari ad effettuare il login sul sito affiliato
else
{
$sql "SELECT `password` FROM `jos_users` WHERE `username` LIKE '$my->username'";
$result mysql_query ($sql);
$result mysql_fetch_array ($result);
$pass $result['password'];


$sql "INSERT INTO `profile_switch` ( `ipAdress` , `user` , `password` ) 
VALUES (
'"
.$_SERVER['REMOTE_ADDR']."', '$my->username', '$pass'
); "
;
mysql_query ($sql);
}

// Cambio sito
mosRedirect('http://localhost/sito1/index.php?option=com_extlogin');

exit;
}

/**
 * Inizializza la sessione, effettua il login e reindirizza alla pagina del profilo
 */
function externalInitSession() {

global 
$mosConfig_host$mosConfig_user$mosConfig_password$mosConfig_db$mosConfig_dbprefix

echo (
"$mosConfig_host/n");
echo (
"$mosConfig_user/n");
echo (
"$mosConfig_password/n");
echo (
"$mosConfig_db/n");
echo (
"$mosConfig_dbprefix/n");


$database = new database($mosConfig_host$mosConfig_user$mosConfig_password$mosConfig_db$mosConfig_dbprefix);

$mainframe = new mosMainFrame$database"login"$mosConfig_absolute_path );
$mainframe->initSession();


$sql "SELECT `user`,`password` FROM `profile_switch` WHERE `ipAdress` LIKE '".$_SERVER['REMOTE_ADDR']."'";
$result mysql_query ($sql);
$result mysql_fetch_array ($result);
$pass $result['password'];
$user $result['user'];

$mainframe->login($user$pass);

$sql "DELETE FROM `profile_switch` WHERE `ipAdress` LIKE '".$_SERVER['REMOTE_ADDR']."'";
mysql_query ($sql);

mosRedirect('http://localhost/sito1/index.php?option=com_comprofiler');


}

?>

Questo è il codice principale del componente che ho creato. Il componente deve essere installato sia sul sitoPadre che sul sitoFiglio anche se quello sul sitoPadre può essere facilmente sostituito da un modulo o componente fatto alla maniera suggerita da -napo- (che ovviamente si porta dietro delle ulteriori modifiche al codice scritto da me evitando l'uso di una tabella esterna).


 



Web Design Bolzano Kreatif