YII框架下实现密码修改
YII2 实现修改密码功能 主要难点: 1、密码加密
YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数据库中的密码相比较)。YII2有自己的加密以及密码验证流程。
加密 $hash = 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
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框架下实现密码修改的更多相关文章
- xampp下安装yii框架下遇到的问题
用yii框架来生成web目录是输入E:\xampp\htdocs\yii\framework/yiic webapp E:\xampp\htdocs\web 时提示php不是内部命令,也不是... 这 ...
- Yii框架下使用redis做缓存,读写分离
Yii框架中内置好几个缓存类,其中有memcache的类,但是没有redis缓存类,由于项目中需要做主从架构,所以扩展了一下: /** * FileName:RedisCluster * 配置说明 * ...
- yii框架下使用redis
1 首先获取到 yii2-redis-master.zip 压缩包 下载地址https://github.com/yiisoft/yii2-redis/archive/master.zip 2 把下载 ...
- centos下mysql密码修改与远程连接
之前的服务器,好久没上去过了,今天上去,密码居然又忘了... 要修改mysql的登陆密码,首先要设置 #vim /etc/my.cnf 在[mysqld] 下面加上一句 skip-grant-tabl ...
- Yii框架下不同contoller之间的方法调用
一个contoller CustomerController里怎么调用另一个controller里的action,Acontoller调用SiteContoller的actionShow($id), ...
- yii框架下jquery在ajax更新后失效问题
解决方案,以live的形式重新绑定一次, /***回复隐藏收起效果***/ $(".btn-reply").live('click',function(event){ var da ...
- Yii框架2.0的安装过程
Yii框架是个不错的php开发框架,大型项目上都可以使用.和大多框架一样他也是开源,而且采用了mvc结构的. Yii1.*,直接下载然后用脚步可以创建自己的项目了,最近看了下Yii2.0版本的,他推荐 ...
- YII 框架在 MAC OS下 连接数据库失败 提示 DB connection: SQLSTATE[HY000] [2002]
作者:zccst CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2002] No such file or dire ...
- windows 环境下mysql 如何修改root密码
windows 环境下mysql 如何修改root密码 以windows为例: 无法开启服务,将mysql更目录下的data文件夹清空,然后调用 mysqld --initialize 开启mysql ...
随机推荐
- append与after区别
append() & prepend()实在元素内插入内容(该内容变成该元素的子元素或节点),after() & before()是在元素的外面插入内容(其内容变成元素的兄弟节点).
- UI_拖动View
方法一 在touchesMoved中 // 获取到触摸的手指 UITouch *touch = [touches anyObject]; // 获取集合中对象 // 获取開始时的触摸点 CGPoint ...
- 达内TTS6.0课件oop_day01
- 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
上一篇我们简单的介绍了一下RoboGuice的使用([八]注入框架RoboGuice使用:(Your First Injected Fragment)),今天我们来看下服务(Service)和广播接受 ...
- 通过 CsvListWriter 读写.csv文件辅助类
package cn.gov.cnis.db; import java.io.File; import java.io.FileReader; import java.io.FileWriter; i ...
- grivid中切换按钮,两个按钮交替
给grivdView不要设值 button的url和 commandName 在rowDatabound中操作变换 protected void GVData_RowDataBound(object ...
- 尝试解决IIS问题一些方法
尝试解决IIS问题一些方法 在控制面板中安装相关功能.添加相关角色 Win下注册IIS: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_re ...
- CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root\921bbfc4\ca7cf42\App_Code.fu98jwep.dll”--“拒绝访问。 ”
在本地开发环境没问题,但是发布到服务器出现:未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Fil ...
- UpdatePanel + 弹出框
ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), "", "alert('操作成功!') ...
- c++ 调用DLL函数,出现错误
c++ 调用DLL函数,出现错误 Run-Time Check Failure #0 - The value of ESP was not properly saved across a funct ...