Yii2 实现修改密码功能

 

  YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数据库中的密码相比较)。YII2有自己的加密以及密码验证流程。

  加密 $hash = Yii::$app->getSecurity()->generatePasswordHash('123456']);

  验证 Yii::$app->getSecurity()->validatePassword('123456', $hash),返回true或false

控制器中:

复制代码
public function actionPassword(){
        $model=new PasswordForm;
        $request = YII::$app->request;
        if($request->isPost && $model->load(Yii::$app->request->post()) && $model->changePassword()){
            Yii::$app->user->logout();
            return $this->goHome();
        }else{
            return $this->render('password',['model'=>$model]);
        }
    }
复制代码

模型中:

复制代码
public function changePassword(){
        $id = YII::$app->user->id;
        $admin=  Admin::findIdentity($id);
        $password = $admin->password;
        if(Yii::$app->getSecurity()->validatePassword($this->password, $password)){
            if($this->pass1 == $this->pass2){
                $newPass = Yii::$app->getSecurity()->generatePasswordHash($this->pass1);
                $admin->password = $newPass;
                if($admin->save()){
                    return true;
                }else{
                    return false;
                }
            }else{
                Yii::$app->session->setFlash('contact','两次新密码不相等');
                return false;
            }
        }else{
            Yii::$app->session->setFlash('contact','旧密码错误');
            return false;
        }
    }
复制代码

 

posted @   慕尘  阅读(1567)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示