lzrqyc110 2016-01-02 19:49:39 2784次浏览 4条回复 0 0 0

我用form组件做一个简单的用户注册功能,只有用户名、密码字段

<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>
<h1>注册页面</h1>
<?php $form = ActiveForm::begin(); ?>
<?php echo $form->field($model, 'u_name')->label('用户名') ?>
<?php echo $form->field($model, 'u_pwd')->passwordInput()->label('密码') ?>
<?php echo Html::submitButton('注册', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
<?php ActiveForm::end(); ?>

在控制器接收入库,我想把密码MD5加密,但是不知道怎么单独接收一个字段啊

$request=Yii::$app->request;
$users=new UserForm();
$users->load($request->post());
$re=$users->save();

这样虽然能入库,但是密码是明文的,怎么加密啊?请各位前辈指导啊!

  • 回复于 2016-01-02 21:58 举报
        public function setPassword($password)
        {
            $this->u_pwd = Yii::$app->security->generatePasswordHash($password);
        }
    

    验证的时候

        public function validatePassword($password)
        {
            return Yii::$app->security->validatePassword($password, $this->u_pwd);
        }
    
    觉得很赞
  • 回复于 2016-01-03 08:27 举报

    前辈,根据你写的,我看了一下文档说明

    Yii::$app->security->generatePasswordHash($password);
    

    generatePasswordHash好像是把已经接到的密码进行加密并返回结果,$password这个变量是需要自己接的密码吧?接值的方法怎么写啊?比如如果不用组件的话,
    input的name值是

    <input name="u_name" type="text">
    <input name="u_pwd" type="text">
    

    控制器接值方式:

    $users->u_name->$request->post("u_name","");
    $users->u_pwd->$request->post("u_pwd","");
    

    但是用form组件,input的name值是一个数组

    <input id="userform-u_name" class="form-control" name="UserForm[u_name]" type="text">
    <input id="userform-u_pwd" class="form-control" name="UserForm[u_pwd]" type="text">
    

    我不知道在控制器怎么单独接收数组中的一个值...

    而且`setPassword``validatePassword`这两个方法是框架已经定义好的吗?还是自己写的?

    觉得很赞
  • 回复于 2016-01-03 10:02 举报

    朋友帮我找了一个临时可用的方法

    $arr=$request->post();
    $u_name=$arr['UserForm']['u_name'];
    $u_pwd=$arr['UserForm']['u_pwd'];
    $users->u_name=$u_name;
    $users->u_pwd=md5($u_pwd);
    $re=$users->save();
    

    先把整个数组接收,然后单独调用、密码加密、保存,但感觉不太好,暂时先这么用着,继续找简单方法ing...

    觉得很赞
  • 回复于 2016-01-04 15:30 举报

    如果這個 model 只拿來註冊
    你可以在 model 裡改寫 load()

    public function load()
    {
        if(parent::load()){
            if(!empty($this->u_pwd)){
               $this->u_pwd = md5($this->u_pwd);
            }
            return true;
        }
        return false;
    }
    
    1 条回复
    回复于 2016-01-06 08:21 回复

    多谢,看半天才反应过来后面怎么做...

    觉得很赞
您需要登录后才可以回复。登录 | 立即注册