CakePHP yeni kullanıcı yetmezliği oluşturmak üzerindeki şifre alanını doldurur

5 Cevap php

Ben benim kayıt yeni kullanıcı şeklinde CakePHP ile komik davranış alıyorum. Bu çok temel bir kullanıcı adı, e-posta ve şifre formu.

Kullanıcı türleri dışında ve eksik bir şekilde bu gibi görünüyor zaman:

http://imgur.com/fcpS5.png

Şifre ve e-posta alanları boştur, çünkü Tabii ki yeni kullanıcı oluşturma başarısız olur. Form hataları gösterilir zaman bu gibi görünüyor:

http://imgur.com/Za9C4.png

Ben şifre alanı sihirli metinle doldurulur neden emin değilim. Boş olması gerekmiyor mu?

5 Cevap

Basitçe görünümünde giriş alanı 'şifre' isim, ama örneğin 'YeniParola' yok. Bu size-karma değil parolası (uzunluk, mukavemet, ..) üzerinde doğrulama yapmak ve geri arama BeforeSave kullanarak elle sonradan hash fırsatı verir ():

function beforeSave() {
    parent::beforeSave();
    if (isset($this->data[$this->name]['newPassword']) && !empty($this->data[$this->name]['newPassword']))
        $this->data[$this->name]['password'] = Security::hash($this->data[$this->name]['newPassword'], 'sha256', true);
    return true;
}

Bu şifre karma ile doldurulur oluyor gibi görünüyor.

Sorununuz Auth $ this-> data nesne içindeki oto Parola karma işleme yolu ile ilgisi vardır. i varsayılan olarak etkin inanıyorum, ve olabilir bir hack i söz konusu eylemin sonunda boş bir dizeye $ this-> data ['Kullanıcı'] ['password'] ayarlayarak bu çözüldü.

Şifre alanı $_POST['password'] hiçbir şey içerir olarak elbette yapıyor gibi aynı, bir sha1($_POST['password']) ile doldurulmuş ediliyor gibi görünüyor sha1('').

CakePHP ile aşina değilim ama eğer sen, password alanında preffiling devre dışı bırakmanız gerekir.

Bu tür karma gibi kaynak yöntemleri için Kullanıcı modeli kullanmak AuthComponent anlatarak şifreleri karma devre dışı bırakabilirsiniz:

$this->Auth->authenticate = $this->User;

Daha sonra soruna neden olduğunu ve bunun yerine kullanılacak yöntemi üzerine yazabilirsiniz:

function hashPasswords($data) {
    // do nothing
    return $data;
}

Açıkçası yukarıdaki tamamen karma şifreyi devre dışı olacak, ama bu örnek için doğru koşulları uygulamak eğer sadece gerektiğinde karma önleyebilir.

Burada tam ayrıntıları: http://teknoid.wordpress.com/2008/10/08/demystifying-auth-features-in-cakephp-12/

(Auth Bileşen sonra elle doğru dizine karma veri taşıma bağlı olmayan bir alan doğrulama ile ilgili bilgiler hariç - ki iyi bir tavsiyedir) burada çözümlerin herhangi Hatta daha Görünüm katman halledeyim için .

Eğer alanını zaten okuyamaz, ve iyi uygulama hatırlamak veya autofill * elle View hiçbir şey alanların değerini ayarlamanız gerekir alanları (bu durumda şifreleri) maskeli değil çünkü.

IE:

<?php
    ...
    echo $form->input( 'User.password', array(
        'type' => 'password',
        'value' => ''
    ));
    ...
?>

Bu veri dizisindeki değeri karma olsa bu karma değer, alanda görüntülenir EDİLMEYECEĞİNİ sağlayacaktır.