YII框架下实现密码修改,yii框架密码修改
<span><strong>YII2 实现修改密码功能</strong></span><br /><br /><strong><span>主要难点:</span></strong><br /><br /><span>1、密码加密</span><br /><span> YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数据库中的密码相比较)。YII2有自己的加密以及密码验证流程。</span><br /><span> 加密 $hash = Yii::$app->getSecurity()->generatePasswordHash('123456']);</span><br /><span> 验证 Yii::$app->getSecurity()->validatePassword('123456', $hash),返回true或false</span><br />2、返回信息处理<br /> Yii::$app->session->setFlash('contact','旧密码错误');//设置 flash<br /> return $this->goBack(); //页面转跳 <br /> Yii::$app->session->getFlash('contact'); //获取 flash
<span>public</span> <span>function</span><span> actionPassword(){ </span><span>$model</span>=<span>new</span><span> PasswordForm; </span><span>$request</span> = YII::<span>$app</span>-><span>request; </span><span>if</span>(<span>$request</span>-><span>isPost){ </span><span>$p</span> = <span>$request</span>->post('PasswordForm'<span>); </span><span>$id</span> = YII::<span>$app</span>->user-><span>id; </span><span>$admin</span>= Admin::findIdentity(<span>$id</span><span>); </span><span>$password</span> = <span>$admin</span>-><span>password; </span><span>if</span>(Yii::<span>$app</span>->getSecurity()->validatePassword(<span>$p</span>['password'], <span>$password</span><span>)){ </span><span>if</span>(<span>$p</span>['pass1'] == <span>$p</span>['pass2'<span>]){ </span><span>$newPass</span> = Yii::<span>$app</span>->getSecurity()->generatePasswordHash(<span>$p</span>['pass1'<span>]); </span><span>$connection</span> = \Yii::<span>$app</span>-><span>db; </span><span>$r</span> = <span>$connection</span>->createCommand()->update('admin', ['password' => <span>$newPass</span>], 'id='.<span>$id</span>)-><span>execute(); </span><span>if</span>(<span>$r</span><span>){ Yii</span>::<span>$app</span>->user-><span>logout(); </span><span>return</span> <span>$this</span>-><span>goHome(); }</span><span>else</span><span>{ </span><span>return</span> <span>$this</span>-><span>goBack(); } } }</span><span>else</span><span>{ Yii</span>::<span>$app</span>->session->setFlash('contact','旧密码错误'<span>); </span><span>return</span> <span>$this</span>->redirect(<span>array</span>('site/password'<span>)); } }</span><span>else</span><span>{ </span><span>return</span> <span>$this</span>->render('password',['model'=><span>$model</span><span>]); } }</span>
代码优化:主要优化细节如下
1、将控制器中的主要逻辑代码移入模型中
2、优化数据库操作
控制器中:
<span>public</span> <span>function</span><span> actionPassword(){ </span><span>$model</span>=<span>new</span><span> PasswordForm; </span><span>$request</span> = YII::<span>$app</span>-><span>request; </span><span>if</span>(<span>$request</span>->isPost && <span>$model</span>->load(Yii::<span>$app</span>->request->post()) && <span>$model</span>-><span>changePassword()){ Yii</span>::<span>$app</span>->user-><span>logout(); </span><span>return</span> <span>$this</span>-><span>goHome(); }</span><span>else</span><span>{ </span><span>return</span> <span>$this</span>->render('password',['model'=><span>$model</span><span>]); } }</span>
模型中:
<span>public</span> <span>function</span><span> changePassword(){ </span><span>$id</span> = YII::<span>$app</span>->user-><span>id; </span><span>$admin</span>= Admin::findIdentity(<span>$id</span><span>); </span><span>$password</span> = <span>$admin</span>-><span>password; </span><span>if</span>(Yii::<span>$app</span>->getSecurity()->validatePassword(<span>$this</span>->password, <span>$password</span><span>)){ </span><span>if</span>(<span>$this</span>->pass1 == <span>$this</span>-><span>pass2){ </span><span>$newPass</span> = Yii::<span>$app</span>->getSecurity()->generatePasswordHash(<span>$this</span>-><span>pass1); </span><span>$admin</span>->password = <span>$newPass</span><span>; </span><span>if</span>(<span>$admin</span>-><span>save()){ </span><span>return</span> <span>true</span><span>; }</span><span>else</span><span>{ </span><span>return</span> <span>false</span><span>; } }</span><span>else</span><span>{ Yii</span>::<span>$app</span>->session->setFlash('contact','两次新密码不相等'<span>); </span><span>return</span> <span>false</span><span>; } }</span><span>else</span><span>{ Yii</span>::<span>$app</span>->session->setFlash('contact','旧密码错误'<span>); </span><span>return</span> <span>false</span><span>; } }</span>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。