我无法理解为什么这不起作用。这段代码snippt在我的userscontroller.php
中是否需要在其他地方?
public function actionCreate()
{
$model=new Users;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Users']))
{
$model->attributes=$_POST['Users'];
$model->password = crypt_SHA_512($model->password,'salt');
if($model->save())
$this->redirect(array('view','id'=>$model->users_id));
}
$this->render('create',array(
'model'=>$model,
));
}
答案 0 :(得分:0)
通过以下方式生成salt并编码密码:
function bouncer(arr) {
// Don't show a false ID to this bouncer.
function a(b) {
if(b !== false) {
return b;
}
}
arr = arr.filter(a);
return arr;
}
bouncer([7, 'ate', '', false, 9]);
确认:
$salt = substr(str_shuffle("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"), 0, 8);
$model->password = crypt($passwordInput, '$6$'.$salt);// '$6$' for SHA_512
<强>可替换地:强>
您可以使用Yii password helper.
通过以下方式哈希密码:
if (crypt($passwordInput, $hashed) == $hashed) {
// Valid action
} else {
// Invalid action
}
确认:
$model->password = CPasswordHelper::hashPassword($password);
答案 1 :(得分:0)
你犯了一个不处理错误的错误,这就是你无法理解为什么这不起作用的原因。
使用此代码段了解原因。
if($model->save())
$this->redirect(array('view','id'=>$model->users_id));
else
print_r($model->getErrors());
正确的方法是在保存之前调用模型validate()函数,并在视图中显示错误。
if ($model->validate()) {
if ($model->save()) {
$this->redirect(array('view','id'=>$model->users_id));
}
}
$this->render('create',array(
'model'=>$model
));
并在您看来:
<?php
$form=$this->beginWidget('CActiveForm' ...);
?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'username'); ?>
<?php echo $form->textField($model,'username'); ?>
<?php echo $form->error($model,'username'); ?>
</div>