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程序设计有所帮助。

(0)

相关推荐

  • yii2中添加验证码的实现方法

    本文实例讲述了yii2中添加验证码的实现方法.分享给大家供大家参考,具体如下: 首先,在模型中添加验证码字段: public function rules(){ return ['verifyCode', 'captcha'], } 其次,可以在函数attributeLabels中添加前台页面中验证码的字段名称: public function atrributeLabels(){ return ['verifyCode'=>'Verification Code', ]; } 然后,在视图文件中

  • Yii2简单实现给表单添加验证码的方法

    本文实例讲述了Yii2简单实现给表单添加验证码的方法.分享给大家供大家参考,具体如下: 控制器SiteController: class SiteController extends Controller { // ... public function actions() { return [ // ... 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ?

  • Yii2增加验证码步骤详解

    本来以为yii2框架验证码这块很全面,尝试百度google了一下,大多数教程写的零零散散不全面,想着自己写一份带有完整步骤的验证码教程. 我们假设site/login 表单登录需要增加验证码. 1.siteController控制器的actions方法增加captcha设置 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'maxLength' => 4

  • yii实现创建验证码实例解析

    本文以实例形式讲述了yii创建验证码的方法,具体步骤如下所示: 一.在SiteController action()下添加如下代码: return array( // captcha action renders the CAPTCHA image displayed on the contact page 'captcha'=>array( 'class'=>'CCaptchaAction', 'backColor'=>0xFFFFFF, ), // page action rende

  • Yii使用Captcha验证码的方法

    本文实例讲述了Yii使用Captcha验证码的方法.分享给大家供大家参考,具体如下: 详细代码可参考:yii自带的示例代码post项目,里面有一个contact表单用到了验证码. 1. Model: 将验证码加入UserLogin的一个属性: class UserLogin extends CFormModel { public $username; public $password; public $rememberMe; public $verifyCode; public function

  • Yii2下点击验证码的切换实例代码

    最近需要用到验证码,搜索了很多关于Yii2验证码的切换的介绍,下面我来记录一下,有需要了解Yii2下验证码的切换的朋友可参考.希望此文章对各位有所帮助. 模型代码如下: <?php namespace app\admin\models; use yii; use yii\base\model; use yii\captcha\Captcha; class LoginForm extends Model{ public $verifyCode; public $password; public $

  • Yii2 如何在modules中添加验证码的方法

    最近玩了下Yii2的验证码部分,正常的逻辑都可以走通的,网上的例子也是没有问题的,关键有问题的部分是在module中使用的时候,分享给大家,往下看之前可以去看看正常情况下是如何使用的. controller部分的代码,这里的跟网上的都类似 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => null, 'backCo

  • Yii输入正确验证码却验证失败的解决方法

    前言 最近在做一个需求时,发现输入正确验证码,但是都提示验证码错误 最后追踪代码发现,如果 Model 在 save 前,单独做了 validate 验证,则在验证结束后,会重新生成验证码 然后在我们 Model save 时,也会进行 validate 验证,验证时,验证码已经重新生成了,所以会匹配不上 // 如果这里用到了验证码,就会出问题 $model = new Test(); $model->validate(); $model->save(); // 这样是正确的 $model =

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

    本文实例讲述了Yii框架实现的验证码.登录及退出功能.分享给大家供大家参考,具体如下: 捣鼓了一下午,总算走通了,下面贴出代码. Model <?php class Auth extends CActiveRecord { public static function model($className = __CLASS__) { return parent::model($className); } public function tableName() { return '{{auth}}'

  • laravel框架实现后台登录、退出功能示例

    本文实例讲述了laravel框架实现后台登录.退出功能.分享给大家供大家参考,具体如下: 我们在写后台管理系统时,登录,退出是避免不了的,那我们如何使用laravel实现呢? 首先,我们来看看登录如何实现? //登录 public function logins(){ //post方式则为登录操作 if(Request()->isMethod('post')){ $info = Request()->only('username','pwd');//过滤表单提交数据,接受用户名,密码 $res

  • django 框架实现的用户注册、登录、退出功能示例

    本文实例讲述了django 框架实现的用户注册.登录.退出功能.分享给大家供大家参考,具体如下: 1 用户注册: from django.contrib import auth from django.contrib.auth.models import User from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponseRedirect # 用户注册 @csrf_exempt

  • Yii框架结合sphinx,Ajax实现搜索分页功能示例

    本文实例讲述了Yii框架结合sphinx,Ajax实现搜索分页功能的方法.分享给大家供大家参考,具体如下: 效果图: 控制器: <?php namespace backend\controllers; use Yii; use yii\web\Controller; use yii\data\Pagination; use SphinxClient; use yii\db\Query; use yii\widgets\LinkPager; use backend\models\Goods; cl

  • 详解Django框架中用户的登录和退出的实现

    Django 提供内置的视图(view)函数用于处理登录和退出 (以及其他奇技淫巧),但在开始前,我们来看看如何手工登录和退出. Django提供两个函数来执行django.contrib.auth\中的动作 : authenticate()和login(). 认证给出的用户名和密码,使用 authenticate() 函数.它接受两个参数,用户名 username 和 密码 password ,并在密码对给出的用户名合法的情况下返回一个 User 对象. 如果密码不合法,authenticat

  • Yii框架中jquery表单验证插件用法示例

    本文实例讲述了Yii框架中jquery表单验证插件用法.分享给大家供大家参考,具体如下: 运行效果图如下: 视图层: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtm

  • Yii框架数据库查询、增加、删除操作示例

    本文实例讲述了Yii框架数据库查询.增加.删除操作.分享给大家供大家参考,具体如下: Yii 数据库查询 模型代码: <?php namespace app\models; use yii\db\ActiveRecord; class Test extends ActiveRecord{ } 控制器代码: public function actionTest(){ //方法一 $sql = 'select * from test where id=:id'; $data = Test::find

  • Yii 框架控制器创建使用及控制器响应操作示例

    本文实例讲述了Yii 框架控制器创建使用及控制器响应操作.分享给大家供大家参考,具体如下: Yii 框架控制器创建使用 在根目录下的controllers目录下创建控制器HelloController.php: <?php namespace app\controllers; use yii\web\Controller; class HelloController extends Controller{ //方法必须以action开头 public function actionIndex()

  • php实现的SSO单点登录系统接入功能示例分析

    本文实例讲述了php实现的SSO单点登录系统接入功能.分享给大家供大家参考,具体如下: SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方案之一,下面我们来看看吧. 简单讲一下 SSO 单点登录系统的接入的原理,前提是系统本身有完善的用户认证功能,即基本的用户登录功能,那做起来就很方便了. SSO 登录请求接

  • Yii2框架实现利用mpdf创建pdf文件功能示例

    本文实例讲述了Yii2框架实现利用mpdf创建pdf文件功能.分享给大家供大家参考,具体如下: 安装mPDF 使用 Composer安装 在yii2的 'composer.json' 加入"mpdf/mpdf":"*" "require": { "php": ">=5.4.0", "yiisoft/yii2": "*", "yiisoft/yii2-b

随机推荐