• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

YII框架下实现密码修改

php 搞代码 3年前 (2022-01-23) 26次浏览 已收录 0个评论
<span>YII2 实现修改密码功能</span><br /><span>主要难点:</span><br /><span>1、密码加密</span><br /><span>  YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数据库中的密码相比较)。YII2有自己的加密以及密码验证流程。</span><br /><span>  加密 $ha<p>4本文¥来源gao!%daima.com搞$代*!码$网9</p><pre>搞代gaodaima码

sh = Yii::$app->getSecurity()->generatePasswordHash(‘123456’]);
  验证 Yii::$app->getSecurity()->validatePassword(‘123456’, $hash),返回true或false
2、返回信息处理
  Yii::$app->session->setFlash(‘contact’,’旧密码错误’);//设置 flash
  return $this->goBack();                 //页面转跳 
  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>

以上就介绍了YII框架下实现密码修改,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:YII框架下实现密码修改
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址