全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Yii框架实现的验证码、登录及退出功能示例

本文实例讲述了Yii框架实现的验证码、登录及退出功能。分享给大家供大家参考,具体如下:

捣鼓了一下午,总算走通了,下面贴出代码。

Model

<?php
class Auth extends CActiveRecord {
  public static function model($className = __CLASS__) {
    return parent::model($className);
  }
  public function tableName() {
    return '{{auth}}';
  }
}

注:我的用户表是auth,所以模型是Auth.php

<?php
class IndexForm extends CFormModel {
  public $a_account;
  public $a_password;
  public $rememberMe;
  public $verifyCode;
  public $_identity;
  public function rules() {
    return array(
      array('verifyCode', 'captcha', 'allowEmpty' => !CCaptcha::checkRequirements(), 'message'=>'请输入正确的验证码'),
      array('a_account', 'required', 'message' => '用户名必填'),
      array('a_password', 'required', 'message' => '密码必填'),
      array('a_password', 'authenticate'),
      array('rememberMe', 'boolean'),
    );
  }
  public function authenticate($attribute, $params) {
    if (!$this->hasErrors()) {
      $this->_identity = new UserIdentity($this->a_account, $this->a_password);
      if (!$this->_identity->authenticate()) {
        $this->addError('a_password', '用户名或密码不存在');
      }
    }
  }
  public function login() {
    if ($this->_identity === null) {
      $this->_identity = new UserIdentity($this->a_account, $this->a_password);
      $this->_identity->authenticate();
    }
    if ($this->_identity->errorCode === UserIdentity::ERROR_NONE) {
      $duration = $this->rememberMe ? 60*60*24*7 : 0;
      Yii::app()->user->login($this->_identity, $duration);
      return true;
    } else {
      return false;
    }
  }
  public function attributeLabels() {
    return array(
      'a_account'   => '用户名',
      'a_password'   => '密码',
      'rememberMe'  => '记住登录状态',
      'verifyCode'  => '验证码'
    );
  }
}

注:IndexForm也可以写成LoginForm,只是系统内已经有了,我就没有替换它,同时注意看自己用户表的字段,一般是password和username,而我的是a_account和a_password

Controller

<?php
class IndexController extends Controller {
  public function actions() {
    return array(
      'captcha' => array(
        'class' => 'CCaptchaAction',
        'width'=>100,
        'height'=>50
      )
    );
  }
  public function actionLogin() {
    if (Yii::app()->user->id) {
      echo "<div>欢迎" . Yii::app()->user->id . ",<a href='" . SITE_URL . "admin/index/logout'>退出</a></div>";
    } else {
      $model = new IndexForm();
      if (isset($_POST['IndexForm'])) {
        $model->attributes = $_POST['IndexForm'];
        if ($model->validate() && $model->login()) {
          echo "<div>欢迎" . Yii::app()->user->id . ",<a href='" . SITE_URL . "admin/index/logout'>退出</a></div>";exit;
        }
      }
      $this->render('login', array('model' => $model));
    }
  }
  public function actionLogout() {
    Yii::app()->user->logout();
    $this->redirect(SITE_URL . 'admin/index/login');
  }
}

注:第一个方法是添加验证码的

view

<meta http-equiv="content-type" content="text/html;charset=utf-8">
<?php
$form = $this->beginWidget('CActiveForm', array(
  'id'            => 'login-form',
  'enableClientValidation'  => true,
  'clientOptions'       => array(
    'validateOnSubmit'   => true
  )
));
?>
  <div class="row">
    <?php echo $form->labelEx($model,'a_account'); ?>
    <?php echo $form->textField($model,'a_account'); ?>
    <?php echo $form->error($model,'a_account'); ?>
  </div>
  <div class="row">
    <?php echo $form->labelEx($model,'a_password'); ?>
    <?php echo $form->passwordField($model,'a_password'); ?>
    <?php echo $form->error($model,'a_password'); ?>
  </div>
  <?php if(CCaptcha::checkRequirements()) { ?>
  <div class="row">
    <?php echo $form->labelEx($model, 'verifyCode'); ?>
    <?php $this->widget('CCaptcha'); ?>
    <?php echo $form->textField($model, 'verifyCode'); ?>
    <?php echo $form->error($model, 'verifyCode'); ?>
  </div>
  <?php } ?>
  <div class="row rememberMe">
    <?php echo $form->checkBox($model,'rememberMe'); ?>
    <?php echo $form->label($model,'rememberMe'); ?>
    <?php echo $form->error($model,'rememberMe'); ?>
  </div>
  <div class="row buttons">
    <?php echo CHtml::submitButton('Submit'); ?>
  </div>
<?php $this->endWidget(); ?>

同时修改项目下protected/components下的UserIdentity.php

<?php
/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity
{
  /**
   * Authenticates a user.
   * The example implementation makes sure if the username and password
   * are both 'demo'.
   * In practical applications, this should be changed to authenticate
   * against some persistent user identity storage (e.g. database).
   * @return boolean whether authentication succeeds.
   */
  public function authenticate()
  {
    /*
    $users=array(
      // username => password
      'demo'=>'demo',
      'admin'=>'admin',
    );
    if(!isset($users[$this->username]))
      $this->errorCode=self::ERROR_USERNAME_INVALID;
    elseif($users[$this->username]!==$this->password)
      $this->errorCode=self::ERROR_PASSWORD_INVALID;
    else
      $this->errorCode=self::ERROR_NONE;
    return !$this->errorCode;
    */
    $user_model = Auth::model()->find('a_account=:name',array(':name'=>$this->username));
    if($user_model === null){
      $this -> errorCode = self::ERROR_USERNAME_INVALID;
      return false;
    } else if ($user_model->a_password !== md5($this -> password)){
      $this->errorCode=self::ERROR_PASSWORD_INVALID;
      return false;
    } else {
      $this->errorCode=self::ERROR_NONE;
      return true;
    }
  }
}

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。


# Yii框架  # 验证码  # 登录  # 退出  # Yii2框架实现登陆添加验证码功能示例  # Yii2 如何在modules中添加验证码的方法  # Yii2下点击验证码的切换实例代码  # Yii2简单实现给表单添加验证码的方法  # Yii2增加验证码步骤详解  # yii2中添加验证码的实现方法  # Yii1.0 不同页面多个验证码的使用实现  # Yii 2.0自带的验证码使用经验分享  # Yii输入正确验证码却验证失败的解决方法  # Yii使用Captcha验证码的方法  # yii实现创建验证码实例解析  # YII2框架中验证码的简单使用方法示例  # 程序设计  # 必填  # 的是  # 我就  # 相关内容  # 第一个  # 感兴趣  # 给大家  # 请输入  # 而我  # 不存在  # 已经有了  # 更多关于  # 所述  # 贴出  # 面向对象  # 操作技巧  # 下午  # 讲述了 


相关文章: 如何在Windows环境下新建FTP站点并设置权限?  MySQL查询结果复制到新表的方法(更新、插入)  想学网站制作怎么学,建立一个网站要花费多少?  如何在新浪SAE免费搭建个人博客?  css网站制作参考文献有哪些,易聊怎么注册?  c# await 一个已经完成的Task会发生什么  如何快速查询域名建站关键信息?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  如何用花生壳三步快速搭建专属网站?  如何通过商城自助建站源码实现零基础高效建站?  网站制作公司,橙子建站是合法的吗?  网站制作软件有哪些,制图软件有哪些?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何快速辨别茅台真假?关键步骤解析  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  h5网站制作工具有哪些,h5页面制作工具有哪些?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  教学论文网站制作软件有哪些,写论文用什么软件 ?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  电商网站制作价格怎么算,网上拍卖流程以及规则?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  三星网站视频制作教程下载,三星w23网页如何全屏?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  宁波免费建站如何选择可靠模板与平台?  如何用腾讯建站主机快速创建免费网站?  内部网站制作流程,如何建立公司内部网站?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  建站之星IIS配置教程:代码生成技巧与站点搭建指南  建站之星后台密码遗忘?如何快速找回?  如何在阿里云虚拟主机上快速搭建个人网站?  如何在阿里云部署织梦网站?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  ,石家庄四十八中学官网?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  威客平台建站流程解析:高效搭建教程与设计优化方案  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  建站之星后台管理:高效配置与模板优化提升用户体验  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  建站主机选哪家性价比最高?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  Python lxml的etree和ElementTree有什么区别  C++时间戳转换成日期时间的步骤和示例代码  实现虚拟支付需哪些建站技术支撑?  如何用免费手机建站系统零基础打造专业网站?  如何通过二级域名建站提升品牌影响力? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。