`
dcj3sjt126com
  • 浏览: 1877874 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用户模型中修改用户信息时,密码是如何处理的

    博客分类:
  • YII
yii 
阅读更多

当我添加或修改用户记录的时候对于处理确认密码我遇到了一些麻烦,所有我想分享一下我是怎么处理的。

场景是使用的基本的那些(系统自带),你需要有一个数据表(user)并且表中有一个密码字段(password),它使用 sha1、md5或其他加密方式加密用户密码。

面是它的工作流程: 当创建用户的时候密码需要加密并且保存,但当修改用户记录时如果使用同样的场景我们最终就会把用户加密过的密码再次加密,这不是我们想要的。我们想要的时当修改时 首先清空模型对象中的密码,把它保存到一个临时的变量中,然后检查密码是否在表单中提交,如果提交了意味着用户的密码需要修改,我们就需要对密码(现在它是纯文本未加密)加密,如果没有提交意味着我们不需要修改,我们就把临时变量的值保存到数据库。

现在让我们看一下代码 ,模型:

<?php if ( ! defined('YII_PATH')) exit('No direct script access allowed');
 
class User extends CActiveRecord
{
    // holds the password confirmation word
    public $repeat_password;
 
    //will hold the encrypted password for update actions.
    public $initialPassword;
 
    /**
     * @return array validation rules for model attributes.
     */
    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            //password and repeat password
            array('password, repeat_password', 'required', 'on'=>'resetPassword, insert'),
            array('password, repeat_password', 'length', 'min'=>6, 'max'=>40),
            array('password', 'compare', 'compareAttribute'=>'repeat_password'),
 
        );
    }
 
 
    public function beforeSave()
    {
        // in this case, we will use the old hashed password.
        if(empty($this->password) && empty($this->repeat_password) && !empty($this->initialPassword))
            $this->password=$this->repeat_password=$this->initialPassword;
 
        return parent::beforeSave();
    }
 
    public function afterFind()
    {
        //reset the password to null because we don't want the hash to be shown.
        $this->initialPassword = $this->password;
        $this->password = null;
 
        parent::afterFind();
    }
 
    public function saveModel($data=array())
    {
            //because the hashes needs to match
            if(!empty($data['password']) && !empty($data['repeat_password']))
            {
                $data['password'] = Yii::app()->user->hashPassword($data['password']);
                $data['repeat_password'] = Yii::app()->user->hashPassword($data['repeat_password']);
            }
 
            $this->attributes=$data;
 
            if(!$this->save())
                return CHtml::errorSummary($this);
 
         return true;
    }
 
}

当添加用户时,我们使用 "insert" 场景,此时密码是必需的。当我们修改它的时候我们使用 "update" 场景,此时密码是可选的,提交时密码字段可以为空,并且验证也不会失败。我们可以从临时变量恢复加密后的密码。

下面时控制器中的方法是怎么做的:

public function actionCreate()
{
    $user=new User('insert');
 
    $this->saveModel($user);
 
    $this->setViewData(compact('user'));
    $this->render('create', $this->getViewData());
}
 
public function actionUpdate($id)
{
    $user=$this->loadModel($id);
    $user->scenario='update';
 
    $this->saveModel($user);
 
    $this->setViewData(compact('user'));
    $this->render('update', $this->getViewData());
}
 
protected function saveModel(User $user)
{
    if(isset($_POST['User']))
    {
        $this->performAjaxValidation($user);
        $msg = $user->saveModel($_POST['User']);
        //check $msg here
    }
}

下面时视图中表单的代码:

<section>
    <?php echo $form->labelEx($user,'password'); ?>
    <div>
        <?php echo $form->passwordField($user,'password',array('maxlength'=>40)); ?>
        <?php echo $form->passwordField($user,'repeat_password',array('maxlength'=>40)); ?>
    </div>
    <?php echo $form->error($user,'password'); ?>
</section>

希望这些对你有所帮助。

本文翻译自外文网站,查看原文请点击:http://www.yiiframework.com/wiki/277/model-password-confirmation-field/
分享到:
评论

相关推荐

    Sharepoint 2013 修改AD密码 切换用户

    当AD域中的用户密码需要更改时,这会影响到用户在SharePoint站点上的登录和访问权限。本文将深入探讨如何修改AD密码以及在SharePoint 2013中切换用户,以便以其他用户的身份登录。 1. **AD密码修改流程**: - 打开...

    VC++实现简单的用户登录系统,包括修改密码的功能。

    5. **安全性**:在处理用户密码时,应使用安全的方式,如哈希加盐(Hashing with Salt)来存储,而不是明文。在VC++中,可以使用bcrypt或SHA-256等哈希函数库。 6. **错误处理**:为了提高用户体验,程序应包含适当...

    QT5修改用户信息.zip

    在这个"QT5修改用户信息.zip"文件中,我们可以推测它包含了一个示例项目,演示了如何在QT5环境中处理用户信息的修改功能。这个示例可能是为了教学目的而创建的,已经过验证,可以在QT5环境中正常运行。 在QT5中,...

    基于Spring+Spring MVC+Mybatis的用户账号注册和密码修改.zip

    密码修改时,Spring MVC同样处理用户的请求,校验新旧密码,确保安全性,并更新数据库中的用户信息。 **3. Mybatis** Mybatis是一个持久层框架,它简化了Java与数据库之间的交互。在用户注册和密码修改系统中,...

    Q719515 ASP.NET MVC 用户修改自己的账户信息,只显示他自己的当前信息并编辑

    在用户提交修改后,你需要在控制器的动作中处理这些更改,这可能涉及更新数据库中的相应记录。使用EF的话,你可以创建一个DbContext,定义用户实体,然后在上下文中执行`SaveChanges()`来保存更新。 6. **错误处理...

    asp.net 用户登录注册,修改密码小案例

    在这个“asp.net 用户登录注册,修改密码小案例”中,我们将深入探讨如何使用ASP.NET来实现这些常见的用户管理功能。 一、用户登录系统 1. **身份验证(Authentication)**:ASP.NET 提供了多种身份验证机制,如...

    thinkphp修改当前账号密码并带数据库与中间控制器

    例如,使用`M('User')`创建用户模型,然后通过`save()`方法更新特定用户的密码字段。 5. **中间控制器(Middleware)**:在ThinkPHP 3.2中,中间控制器用于在请求到达目标控制器之前执行某些操作。在修改密码的场景...

    labview登录界面 包括账户密码登录 用户修改 二维码登录

    `user修改.rtm`可能包含用户信息的实时数据模型,与用户交互时更新数据。 3. **二维码登录**:这是一种便捷的登录方式,用户扫描二维码即可快速登录。`QR二维码识别.vi`是LabVIEW中的一个子VI,专门用于读取和解析...

    JavaScript修改密码验证

    本文将深入探讨如何利用JavaScript在C# .aspx页面上进行密码修改验证,这是一个常见的应用场景,尤其是在用户账户管理功能中。 ### 核心知识点:JavaScript在C# .aspx页面上的密码验证 #### 1. JavaScript在Web...

    SSM实现用户注册登录以及增加删除修改用户

    13. **实现用户信息管理**:通过Service层调用DAO层实现对用户的增加、删除、查找和修改,控制器负责处理请求并返回结果。 通过以上步骤,即可利用SSM框架实现一个基础的用户注册登录系统以及用户信息管理功能。这...

    用户信息系统页面信息_用户信息系统_

    用户信息系统是IT领域中一个重要的组成部分,主要用于管理和处理与用户相关的数据。系统设计的核心目标是高效、安全地存储和检索用户信息,同时提供便捷的界面供用户或管理员进行信息的查询、修改和删除等操作。在这...

    安卓Studio的登录注册修改密码

    总的来说,Android Studio的登录注册及密码修改功能涉及到了UI设计、数据验证、网络请求、安全策略、错误处理等多个方面,这些都是移动应用开发中不可或缺的部分。通过分析和理解"User_V2.0"中的代码,开发者可以...

    基于Javaweb实现ATM机系统开发实战(七)用户密码修改

    在本实践教程中,我们将深入探讨如何基于Java Web技术实现ATM机系统的用户密码修改功能。这个功能对于任何银行或自助服务系统都是至关重要的,因为它确保了账户安全性和用户隐私。我们将主要关注以下核心知识点: 1...

    jsp+servlet+javaBean实现MVC (关于学生登录注册修改密码)

    在这个模式中,"Model"代表数据模型,"View"是用户界面,"Controller"则负责处理用户交互并协调Model和View之间的通信。 1. **Model(模型)**:模型层是应用的核心,包含业务逻辑和数据处理。在"学生登录注册修改...

    手机信息管理系统模型

    《手机信息管理系统模型》是李龙等人在《软件测试实用技术与常用模板》一书中提供的源码示例,旨在帮助读者理解和实践手机信息管理系统的开发。这个系统可能涵盖了用户信息管理、联系人管理、通话记录、短信管理等...

    thinkphp5登陆密码修改demo

    在这个模型中,Controller处理用户请求,Model处理数据逻辑,而View负责展示用户界面。在这个"thinkphp5登陆密码修改demo"中,我们可以看到前端采用了Bootstrap框架,这是一款广泛使用的响应式网页设计工具,可以...

    修改密码、找回密码1

    系统处理流程与修改密码相似,但输出结果通常被称为"更新密码成功",而不是"修改密码成功"。 总结来说,修改和找回密码的功能涉及到用户验证、数据库操作和密码策略等核心要素。它确保了用户能够安全地管理自己的...

    修改密码机试题

    总的来说,“修改密码机试题”这个项目涵盖了Swing GUI编程、密码处理、用户交互和数据验证等多个IT领域的知识点,是一个很好的学习和实践平台。通过这个项目,开发者可以提升对Java GUI编程的理解,增强密码安全性...

    基于vb.net和access修改密码功能

    所谓的修改密码功能,是指在VB.NET开发环境中,使用Access数据库来存储用户密码,并在修改密码时,实现在密码强度验证、验证码的实现等功能。本功能涵盖了多个知识点,包括VB.NET编程、Access数据库操作、密码强度...

    VC++实现简单的用户登录系统(ADO)。包括修改密码功能!

    在服务器端,你需要更新对应用户的密码字段,同样使用哈希算法处理新密码。 在VC++中,ADO提供了丰富的类和方法来处理数据库操作,如`Open()`, `Execute()`, `GetRows()`等。你还需要理解如何处理异常和错误,确保...

Global site tag (gtag.js) - Google Analytics