Folosirea user_activation_key pentru alte scopuri
Trebuie să știu dacă este sigur să folosesc user_activation_key
(din WP_User
) pentru alt scop, cum ar fi verificarea emailului (o funcționalitate pe care aș crea-o și care ar trimite mai întâi o verificare prin email înainte de activarea contului creat)?
Iată cum vor funcționa lucrurile. Un utilizator se va înregistra folosind formularul meu personalizat de înregistrare care va fi disponibil doar în frontend. După înregistrarea cu succes, utilizatorul va fi notificat prin email că contul a fost creat împreună cu link-ul de activare care este generat la înregistrare folosind următoarea convenție:
http://www.example.com/verify/?key=SAMPLEACTIVATIONKEY4321
Credeți că această abordare va fi sigură?

Crezi că acest lucru va fi sigur?
Poate. Două probleme.
De asemenea, trebuie să te asiguri că cheia nu poate fi ghicită. Fără numere incrementale. Poți folosi ceva de genul wp_generate_password
pentru a obține niște caractere pseudo-aleatorii. Folosește un "salt" aleatoriu plus email-ul utilizatorului și timpul de înregistrare sau uniqid
și ai șanse mari să asiguri unicitatea (vezi mai jos) și să creezi o cheie care nu poate fi ghicită.
$user_email = some_function_to_get_user_email();
$salt = wp_generate_password(20); // șir "aleatoriu" de 20 de caractere
$key = sha1($salt . $user_email . uniqid(time(), true));
De asemenea, trebuie să te asiguri că cheia este unică: nu ar trebui să existe coliziuni.
Nu există constrângeri pe coloana user_activation_key
în baza de date care să asigure unicitatea, așa că este responsabilitatea aplicației tale (de ex. WordPress și partea de PHP) să se asigure de acest lucru. Cu alte cuvinte, fie înainte, fie după ce generezi cheia, asigură-te că nu există deja în baza de date. Exemplu simplu, netestat:
<?php
$key = some_function_that_generates_a_key();
$res = $wpdb->get_col($wpdb->prepare("SELECT EXISTS(SELECT 1 FROM {$wpdb->users} WHERE user_activation_key = %s)", $key));
if ($res) {
// cheia există, încearcă din nou!
} else {
// totul este în regulă.
}
Dacă ai nevoie de un ghid, încearcă să te uiți la cum WordPress gestionează email-urile de resetare a parolei. Procesul este același: generează o cheie care nu poate fi ghicită, asigură-te că este unică, inserează-o în baza de date împreună cu utilizatorul corespunzător, apoi trimite-le un email cu un link pentru resetarea parolei.

Salut @Ajay, am editat întrebarea mea pentru mai multe detalii complete. Te rog verifică din nou, deoarece nu am înțeles ce ai vrut să spui prin "oricine poate folosi asta".

Cred că el se referă la faptul că trebuie să fie mai specific pentru utilizatorul căruia îi aparține cheia de activare. Acest lucru va împiedica persoanele să folosească metode de forță brută pentru a accesa contul altcuiva.

@Ollie Am asigurat că cheia de activare este trimisă la adresa de email a utilizatorului care încearcă să se înregistreze. De asemenea, cheia de activare conține o valoare hashed a numelui de utilizator, parolei și a timestamp-ului. Fac lucrurile corect? Sunt cam nou în aceste lucruri cu Wordpress.
