主要难点:1、密码加密 YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数据库中的密码相比较)。YII2有自己的加密以及密码验证流程。 加密 $hash = Yii::$app->getSecurity()->generatePasswordHash("123456"]); 验证 Yii::$app->getSecurity()->validatePassword("123456", $hash),返回true或false2、返回信息处理 Yii::$app->session->setFlash("contact","旧密码错误");//设置 flash return $this->goBack(); //页面转跳 Yii::$app->session->getFlash("contact"); //获取 flash public function actionPassword(){
$model=new PasswordForm;
$request = YII::$app->request; if($request->isPost){
$p = $request->post("PasswordForm");
$id = YII::$app->user->id;
$admin= Admin::findIdentity($id);
$password = $admin->password;
if(Yii::$app->getSecurity()->validatePassword($p["password"], $password)){
if($p["pass1"] == $p["pass2"]){
$newPass = Yii::$app->getSecurity()->generatePasswordHash($p["pass1"]);
$connection = Yii::$app->db;
$r = $connection->createCommand()->update("admin", ["password" => $newPass], "id=".$id)->execute();
if($r){
Yii::$app->user->logout();
return $this->goHome();
}else{
return $this->goBack();
}
}
}else{
Yii::$app->session->setFlash("contact","旧密码错误");
return $this->redirect(array("site/password"));
}
}else{
return $this->render("password",["model"=>$model]);
} }代码优化:主要优化细节如下 1、将控制器中的主要逻辑代码移入模型中 2、优化数据库操作控制器中: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;
}
}Yii 用户登陆机制 http://www.linuxidc.com/Linux/2015-01/111602.htmYii中引入js和css文件 http://www.linuxidc.com/Linux/2015-01/111603.htmYii 不完全解决方案 http://www.linuxidc.com/Linux/2015-01/111606.htmYii CGridView 基本使用 http://www.linuxidc.com/Linux/2015-01/111607.htmYii框架分布式缓存的实现方案 http://www.linuxidc.com/Linux/2015-02/113828.htmYii 的详细介绍:请点这里
Yii 的下载地址:请点这里本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-07/120137.htm