$ This-> verileri kullanarak erişmeye çalışırken neden CakePHP parola alanı boş olduğunu?

8 Cevap php

I am implementing an authentication component, This is my registration page


create('User',array('action' => 'login'));
    echo $form->input('primary_email',array('size'=> 32));
    echo $form->input('password',array('label' => 'Password'));
    echo $form->input('remember_me',array('label' => 'Remember Me','type'=>'checkbox','checked' => 'false'));
    echo $html->link('Forgot Password','/users/forgot/');
    echo $form->end('Login'); 

    // Javascripts
    echo $javascript->link('jquery',false);
    //echo $javascript->link('jquery.validate.js',false);
    //echo $javascript->codeBlock($code, array('inline' => false)); 

?>

When I print the contents of $this->data the password field turns up empty. How can I resolve this?

Ben password2 için şifre veya başka bir şey adlandırmak zaman işe yarıyor! Garip

8 Cevap

Auth bileşen (güvenlik amaçlı) veri diziden şifreyi kaldırır çünkü bu. neden bunu zaten parolasını içeren istersiniz? bana mantığı (Ben form alanları kullanmakta olduğunuz varsayalım) şifre olmadan birisi oturum idare edecek hatırlıyorum.

Ben aynı sorunu vardı ve mrlanrat önerisi benim için çalıştı.

Bunun yerine $ this-> data ['password'] erişmeye çalışırken, sen $ this-> Auth-> data ['password'] erişmek gerekir

Temelde ne olur Auth bileşeni şifreyi sağlamalarının ve $ this-> Auth-> veri içine karma sürümünü hareket olmasıdır. Olmayan karma sürüm güvenlik amacıyla silinir.

Eğer Auth bileşenle ilgili veri ile başa çıkmak için ihtiyacınız olduğunda, bu-> Auth-> veri ve bu-> Data $ $ değil kullandığınızdan emin olun.

Ben de sizin login () fonksiyonunu görmek istiyorum ama gerçekten bu sorun garip görünüyor. Eğer şifrenizi alanını yeniden adlandırarak bu geçici bir çözüm ve daha sonra giriş fonksiyonu içinde gibi bir şey yapabilirsiniz:

$this->data['password']=$this->Auth->password($this->data['User']['pwd']);
//now you can call $this->Auth->login and it will work

One thing you may be able to do is have the user confirm their password, and use it for the login function. I may be completely mis-reading what you're trying to accomplish, but if you have the user Confirm their password w/ a password 2 field, you can compare the two, and also use the starting state of the confirmation password for whatever it is that you're wanting to do. So:

echo $form->input('password', array('label' => 'password'));
echo $form->input('password2', array('label' => 'Confirm Password'));

Başarmak isteyen konum ne olursa olsun mantık içinde, sadece koyabilirsiniz:

$morePermanentDataStorage = $this->data['User']['password2'];
if($this->data['User']['password'] == $this->Auth->password($this->data['User']['password2']) {
//function logic here
}

Ben de yukarıdaki form mantığı aslında başlar varsayıyorum:

echo $form->create('User');

I ['user'] $ this-> Auth-> data ['Kullanıcı'] kullanarak, aynı sorunu vardı ve $ this-> Auth-> data ['Kullanıcı'] ['password'] düzelttim.

Onun automagic yaptığında auth kontrolör verileri parola kaldırıldı gibi görünüyor.

Ben aynı sorunu vardı ve bu yöntemle aracılığıyla giriş için e-mail alanını kullanarak ilgili edildi

$this->Auth->fields = array('username' => 'email', 'password' => 'password');

Bunu çözmek değil, bu yüzden benim veritabanı üzerinde kullanıcı adı alanına dahil etmek için seçti ve şimdi mükemmel çalışıyor.

Ben geri birkaç hafta üzerinde çalışıyordu bazı ExtJS kimlik ile aynı problem vardı.

Bir garip geçici çözüm /config/core.php gidin ve geçici hata ayıklama seviyesini değiştirmek için, örneğin (ve daha sonra isterseniz tekrar hata ayıklama seviyesini değiştirmek) - Configure::write('debug', 1); için Configure::write('debug', 0); değiştirmek ve daha sonra kodu çalıştırın - ille bölümünü Auth bileşeni ile. Amaçlandığı gibi $this->data['User']['password'] şimdi hash değeri ile doldurulur.

Ne ilk etapta bu neden hala beni aşar :)

Her şeyden önce, siz Configure::write('Cache.disable', true); dosyasındaki kodu core.php Görüşlerinizi gerekir