Yii密码加密

时间:2015-05-02 23:19:59

标签: php yii

我无法理解为什么这不起作用。这段代码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,
    ));
}

2 个答案:

答案 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("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345‌​6789"), 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>