パスワードフィールドから値を削除するのに問題があります。1つ以上の必須フィールドを入力せずにサインアップフォームを送信すると、パスワードフィールドに32ビット文字の値が生成されます。
その場合、このフィールドを空白にします。
おかげで、
夫人
パスワードフィールドから値を削除するのに問題があります。1つ以上の必須フィールドを入力せずにサインアップフォームを送信すると、パスワードフィールドに32ビット文字の値が生成されます。
その場合、このフィールドを空白にします。
おかげで、
夫人
/メソッドの$htmlOptions
パラメーターを使用してビューファイルのコードでもこれを行うことができ、パスワード入力で空の値属性をレンダリングするように強制できます。CActiveForm
CHtml
<?= CHtml::activePasswordField($model, 'password', array('value'=>'')) ?>
<?= $form->passwordField($model, 'password', array('value'=>'')) ?>
MVCプログラミングパターンのルールに違反するコントローラーからモデル機能を利用しているため、コードは本当に悪いです。
代わりに、このコードは、 beforeSave()メソッド内のユーザーのモデルクラスに配置する必要があります。
コードなしで言うのは難しいですが、サインアップ時にフォームの検証が失敗すると、フォームにサインアップ送信からのデータが再入力されます(CActiveFormであるため)。これには、ハッシュしたパスワードが含まれていますか?
これを回避する1つの方法は、フォームの送信時に、save()またはvalidate()が失敗した後にパスワードをクリアすることです。基本的なYiiコードがある場合、フォームの投稿アクションは次のようになります。
$model->attributes = $_POST['SignupModel'];
$model->password = cool_hash_function($model->password); // hashing the password - maybe you have this in beforeValidate(), I don't know
if ($model->save()) {
$this->redirect('/success!'); // yay! redirect or whatever
} else {
$model->password = ''; // if the save failed, clear out the password before re-rendering the form
}
$this->render('signup',array('model'=>$model)); // the form will now render without the pw
はい、ユーザーはパスワードを再入力する必要があります。保存する前にパスワードをハッシュするプロセスの場所によっては、これに対する他のアプローチがあるかもしれません-そして私があなたの実際の問題を推測することに近づいたかどうかによって異なります。:)