Codeigniter - Passwort Vergessen
Hallo: ich brauche zur Umsetzung einer "Passwort vergessen" auf der Anmeldeseite. Hier erklärte ich was ich habe, so weit.
- Erholen Ansicht ist Aufforderung zum empfangen von E-Mail-Eingang
- Funktion
email_exists()
überprüfen E-Mail. Wenn dem so ist,send_email()
mit$temp_pass
key und link.Die Datenbank speichern $temp_pass für weitere Maßnahmen und überprüfung. - Benutzer klickt auf den link vorher geschickt vorbei
$temp_pass
Funktion reset_password. - Die Modell-controller überprüfen
$temp_pass
mit der Datenbank. Wenn dem so ist, laden anzeigen zur Eingabe neues Passwort - und hier ist, wo ich bin stecken, weil die form verweist auf einen controller, der nicht erkennt$temp_pass
also keine Passwort zurücksetzen.
Wie kann ich abgerufen das neue Kennwort ein, verbunden mit dem richtigen Benutzer und Passwort zurücksetzen?
Folgenden Code:
Controller
public function recover(){
//Loads the view for the recover password process.
$this->load->view('recover');
}
public function recover_password(){
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|callback_validate_credentials');
//check if email is in the database
$this->load->model('model_users');
if($this->model_users->email_exists()){
//$them_pass is the varible to be sent to the user's email
$temp_pass = md5(uniqid());
//send email with #temp_pass as a link
$this->load->library('email', array('mailtype'=>'html'));
$this->email->from('[email protected]', "Site");
$this->email->to($this->input->post('email'));
$this->email->subject("Reset your Password");
$message = "<p>This email has been sent as a request to reset our password</p>";
$message .= "<p><a href='".base_url()."main/reset_password/$temp_pass'>Click here </a>if you want to reset your password,
if not, then ignore</p>";
$this->email->message($message);
if($this->email->send()){
$this->load->model('model_users');
if($this->model_users->temp_reset_password($temp_pass)){
echo "check your email for instructions, thank you";
}
}
else{
echo "email was not sent, please contact your administrator";
}
}else{
echo "your email is not in our database";
}
}
public function reset_password($temp_pass){
$this->load->model('model_users');
if($this->model_users->is_temp_pass_valid($temp_pass)){
$this->load->view('reset_password');
}else{
echo "the key is not valid";
}
}
public function update_password(){
$this->load->library('form_validation');
$this->form_validation->set_rules('password', 'Password', 'required|trim');
$this->form_validation->set_rules('cpassword', 'Confirm Password', 'required|trim|matches[password]');
if($this->form_validation->run()){
echo "passwords match";
}else{
echo "passwords do not match";
}
}
Model_users
public function email_exists(){
$email = $this->input->post('email');
$query = $this->db->query("SELECT email, password FROM users WHERE email='$email'");
if($row = $query->row()){
return TRUE;
}else{
return FALSE;
}
}
public function temp_reset_password($temp_pass){
$data =array(
'email' =>$this->input->post('email'),
'reset_pass'=>$temp_pass);
$email = $data['email'];
if($data){
$this->db->where('email', $email);
$this->db->update('users', $data);
return TRUE;
}else{
return FALSE;
}
}
public function is_temp_pass_valid($temp_pass){
$this->db->where('reset_pass', $temp_pass);
$query = $this->db->get('users');
if($query->num_rows() == 1){
return TRUE;
}
else return FALSE;
}
Sehen Sie, wie Ionen-auth macht.
InformationsquelleAutor crg821 | 2013-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht so sicher, wo Sie am stecken. Ich kann get die Tatsache, dass Sie erstellen ein temporäres Kennzeichen für einen Benutzer ein, die Sie überprüfen, wenn der Benutzer auf den link klickt. Also, das heißt, Sie beginnen mit einer Sitzung an diesem Punkt, und der Benutzer kann nur das Passwort zurücksetzen, nur dann, wenn die betreffende Sitzung aktiv ist.
Nach diesem Schritt, Sie fordern den Benutzer zur Eingabe seiner neuen Passwort, und da haben Sie die temporäre fahne, die Sie anrufen, als
$temp_pass
für den Benutzer (bitte achten Sie darauf, dass es eindeutig sein sollte), dann kannst du den Benutzer, der versucht, um das Kennwort zurückzusetzen.So, alles, was Sie tun müssen, ist zum ausführen einer db-Abfrage dieser Art -
Ich Schätze, dass Sie einen Fehler gemacht
Auch, mir ist nur aufgefallen in Ihrem
recover_password()
Funktion -Sollte nicht die oben genannten Zeile sein -
Update
Können Sie pass
$temp_pass
in den Sitzungen und von dort auch wieder abrufen. Das ist ein Weg, um darüber zu gehen.Ich weiß nicht, wo man das Stück code, den Sie gab mir nur. Die Funktion reset_password($temp_pass) ist der eine tritt auf, sobald der Benutzer auf den link klickt und es daher ausgewertet, ob die $temp_pass gültig ist oder nicht und es gibt true zurück, so dass lädt er die Ansicht, die zum abrufen der neuen Passwort. Nun die form Punkte zu update_password (), aber ist nicht in der Lage, $temp_pass mehr zum update der db: $this->db->update('users', $Daten); weil Sie nicht wissen, welche Benutzer?? Im stecken da richtig... ich Danke Ihnen sehr für Ihre Hilfe.
Eigentlich PHP unterstützt variable substitution innerhalb von double-quoted strings, so dass die erste version eigentlich funktionieren soll dachte, es gilt als gute Praxis, verwenden Sie die Variante mit geschweiften Klammern:
"main/reset_password/{$temp_pass}'>Clic...
Sie können pass
$temp_pass
in den Sitzungen und von dort auch wieder abrufen. Das ist ein Weg, um darüber zu gehen.Ich bin verloren, wo ich brauche, um eine Sitzung zu starten? Ich denke, es sollte gehen, bevor der view geladen richtig? Aber dann ist meine Funktion update_password in meinem Modell Benutzer nicht aktualisieren Kennwort. Keine Hilfe? Ich werde es zu schätzen wissen...
InformationsquelleAutor Aniket
Möchte ich Ihnen einige Verbesserungen, um Ihre Passwort-reset-Verfahren.
md5(uniqid())
eingegrenzt werden kann, schlecht, wenn Sie wissen, die Zeit, die der reset wurde durchgeführt.Veröffentlichte ich einige Beispiel-code, wie so ein Passwort-reset-Verfahren Aussehen könnte, zusammen mit einer Klasse generiert werden sichere tokens.
Jetzt besser? Ich habe soeben ein neues tool SilentNotes und neu gestaltet, die Website zu machen, Sie sensibel für kleine Handys.
InformationsquelleAutor martinstoeckli