Pagina 1 di 2

Login con indirizzo mail

Inviato: 18/01/2013, 15:44
da digreo
Partendo con il dire di non propormi la mod (Prime Login via E-Mail) presente su phpbb.com, visto che ci sono diverse cose che non mi interessano (pannello amministratore, login anche con username, etc.);
Voglio cercare di realizzare un semplice login con soltanto l'indirizzo mail, senza altre strane funzioni!

Dunque, guardando la mod su phpbb.com, mi viene da pensare che i file da modificare sono:
includes/auth/auth_db.php function login_db()
includes/functions.php function login_box()
includes/functions_user.php function validate_username() & validate_email()
e infine i vari template e language!

Questa a prima occhiata.. ora bisogna approfondire!!
Se qualcuno ha già fatto qualcosa del genere o può semplificarmi l'operazione con qualche dritta.. sono qui per questo!!!

Grazie ancora :geek:

Re: Login con indirizzo mail

Inviato: 18/01/2013, 16:18
da digreo
Ad esempio,
basterebbe inserire queste due righe di codice in includes/function.php, subito prima di $username=request_var('username', '', true);, nella funzione login_box() che richiama tutte le altre funzioni degli altri includes, per consentirci di fare il login con la mail (che ci consentirà di trovare lo username nel db e far funzionare tutte le altre funzioni normalmente.. OPPURE NO?!?)

Con questa var leggiamo l'input modificato del login, cioè attraverso la mail e andiamo a rintracciare lo username

Codice: Seleziona tutto

$email = request_var('email', '', true);

$sqluser = 'SELECT username, user_email FROM '.USERS_TABLE.' WHERE user_email = '.$email;
$resultuser = $db->sql_query($sqluser);
Così riscriviamo (visto che lo abbiamo cancellato!!) $username= request_var('username', '', true);
Ma non sono sicuro che il request_var TRUE (cookie se non sbaglio) serve ad altre funzioni diverse dal login!?! ..Però, in questo caso, si potrebbe creare un cookie subito dopo queste righe di codice! Vi viene in mente qualcosa?

Codice: Seleziona tutto

$username = $db->sql_fetchrow($resultuser);  

$db->sql_freeresult($resultuser);

Re: Login con indirizzo mail

Inviato: 28/01/2013, 16:48
da digreo
Nessuno sa rispondermi? ...Se non rincorro in errori?!

Re: Login con indirizzo mail

Inviato: 05/02/2013, 20:49
da digreo
Ricapitoliamo:
includes/function.php, nella funzione login_box().
Cancelliamo $username=request_var('username', '', true); e inseriamo::

Codice: Seleziona tutto

$email = request_var('email', '', true);
$sqluser = 'SELECT username, user_email FROM '.USERS_TABLE.' WHERE user_email = '.$email;
$resultuser = $db->sql_query($sqluser);
$username = $db->sql_fetchrow($resultuser);
$username = $username['username'];
$db->sql_freeresult($resultuser);
Vorrei sapere se incorrerò in qualche problema..!? O se mi consigliate un codice diverso.. etc.

Re: Login con indirizzo mail

Inviato: 07/02/2013, 22:34
da Soshen
Ma l'username lo vuoi tenere o proprio togliere?

Re: Login con indirizzo mail

Inviato: 08/02/2013, 21:38
da digreo
la variabile username penso sia essenziale per altri script e per il database, lo user=>data, etc.!
Sto provando a fare il login con la email e poi rintracciare lo username per creare la variabile.

Re: Login con indirizzo mail

Inviato: 09/02/2013, 20:46
da ludwig
La risposta di Soshen era, secondo me, più che legittima.... ne è prova il fatto che stavo per farla anch'io (intendiamoci non sto affatto sopravvalutando me stesso, sto solo affermando che siamo già in due a pensare la stessa cosa :D ).

Infatti, se all'interno del tuo forum il nome utente non serve, non è più facile dire (o forzare) l'inserimento diretto della email in fase di registrazione? (niente nome utente.... o meglio nome utente = email utente).... anche perché se l'utente si registra con un nome utente, perché poi richiedere l'email in fase di login?. :shock:

Comunque mi attengo al minimo, e ti spiego come fare per eseguire il login con la password... lasciando che tutto il resto rimanga uguale.

Innanzitutto, non fare alcuna delle modifiche che hai pensato... anche perché penso non dovrebbero funzionare! :lol:

Al più prova così:
In ./includes/auth/auth_db.php................. al posto di:

Codice: Seleziona tutto

$username_clean = utf8_clean_string($username);

	$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts
		FROM ' . USERS_TABLE . "
		WHERE username_clean = '" . $db->sql_escape($username_clean) . "'";
inserisci

Codice: Seleziona tutto

//username_clean si suppone contenga l'email
$username_clean = utf8_clean_string($username);

	$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts
		FROM ' . USERS_TABLE . "
		WHERE user_email = '" . $db->sql_escape($username_clean) . "'";
poi in ./includes/functions.php................ al posto di:

Codice: Seleziona tutto

                // Check if the supplied username is equal to the one stored within the database if re-authenticating
		if ($admin && utf8_clean_string($username) != utf8_clean_string($user->data['username']))
inserisci

Codice: Seleziona tutto

                // Check if the supplied username is equal to the one stored within the database if re-authenticating
                //l'accesso al PCA è garantito dall'email e non più dall'username
		if ($admin && utf8_clean_string($username) != utf8_clean_string($user->data['user_email']))
inoltre in ./styles/prosilver/template/login_body.html dovresti sostituire questo:

Codice: Seleziona tutto

<dt><label for="{USERNAME_CREDENTIAL}">{L_USERNAME}:</label></dt>      
con

Codice: Seleziona tutto

<dt><label for="{USERNAME_CREDENTIAL}">{L_EMAIL}:</label></dt>
...così dovrebbe funzionare! ;)

P.S.: ho cercato di modificare il codice il meno possibile... per non rendere questa pagina di spiegazioni troppo lunga (avevo poco tempo a disposizione)...ma ciò ha comportato l'utilizzo dei precedenti nomi per le variabili.... e quindi una confusione cognitiva all'interno del codice, tuttavia ci tengo a precisare che questo non è il mio solito modo di procedere nella programmazione.

Re: Login con indirizzo mail

Inviato: 09/02/2013, 21:09
da digreo
Capisco benissimo, però non mi sembra differisca molto da quello che ho fatto io.. però, secondo me, è una soluzione (la tua) che non funziona :twisted: ; in quanto $username deve essere uguale a $user->data['username'] perchè è quello che si aspettano molte altre funzioni dei file includes (es. function_user)!
...Ma posso sbagliarmi.

Re: Login con indirizzo mail

Inviato: 10/02/2013, 0:46
da ludwig
digreo ha scritto:non mi sembra differisca molto da quello che ho fatto io
:lol: :lol: :lol: :lol: :lol: :lol: :lol:
Spero seriamente tu stia scherzando... le differenze sarebbero palesi anche per un cieco (si agisce proprio su un file differente)!
digreo ha scritto:però, secondo me, è una soluzione (la tua) che non funziona ; in quanto $username deve essere uguale a $user->data['username'] perchè è quello che si aspettano molte altre funzioni dei file includes (es. function_user)!
Testata in locale.... risultato:
la mia funziona (forse proprio perché io ho capito a che serve quel $user->data['username']... e che non c'entra niente con il login utente ma solo con il login del PCA), la tua no (ed ecco già scovata, senza accorgersene, la prima differenza fra le due versioni :lol: )!

P.S.: In ogni caso io cercavo di aiutare. Ho cercato di farti capire che stavi agendo nella posizione e nelle modalità sbagliate (sebbene avessi pochissimo tempo a mia disposizione... cosa che, come io stesso ho affermato, non ha reso la modifica un gioiello della programmazione). Puoi provarla e constatarne il funzionamento, oppure, se preferisci, del tutto ignorare il mio intervento! ;)

Ho solo una domanda da fare, alla cui risposta non replicherò: che senso ha chiedere aiuto se si pensa di sapere più degli altri?

Re: Login con indirizzo mail

Inviato: 10/02/2013, 21:21
da digreo
E' qui lo sbaglio! :D .. Adesso sò! :P

Grazie infinite!.. Probabilmente proverò prima la tua soluzione. :*