thinkphp框架下实现登录、注册、找回密码功能


Posted in PHP onApril 06, 2016

本文实例为大家分享了thinkphp框架下使用ajax表单提交的登录、注册、找密码的实现方法,以及注册后的用户需后台审核。

user表的字段为id、num、password、name、email、addtime、status

具体代码如下

<?php
namespace Home\Controller;
use Think\Controller;
class LoginController extends Controller {
  //处理登录
  public function signin(){ 
    if(IS_GET){ 
      $this->display();
    } 
    if(IS_POST){
      /* 调用登录接口登录 */
      $User = M('user') ;  
      //I方法接收页面传递来的值
      $num = I('num') ; 
      $password = I('password') ;
      //查找user表中num等于$num的值
      $datanum = $User->where(array('num'=>$num))->find();
      //判断$datanum的值
      if ($datanum){
        if (md5($password) === $datanum['password']) { 
          if ($datanum['status'] == 0) {
            $this->error('用户处于未审核状态,请联系管理员');
          }elseif($datanum['status'] == 2){
            $this->error('用户处于禁用状态,请联系管理员');
          }else{
            $this->autoLogin($datanum) ; //调用私有方法自动登录. 
            $uid = $datanum['id'];
            if($_SESSION['user_auth']['uid'] && $_SESSION['user_auth']['role'] == 'user'){
              $this->success('登录成功!', U('Index/index'));
            }else{
              $this->error('存储错误.');
            }
          }
        }else{
          $this->error('密码填写不正确,请重新填写'); 
          exit();
        }
      }else{
        $this->error('用户不存在,请注册',U('signup'));
      }
    }
  }
 
  public function autoLogin($user){  
    /* 记录登录SESSION */
    $auth = array(
      'uid'       => $user['id'],
      'num'    => $user['num'], 
      'role'      => 'user' , //记录用户类型 
    );
    session('user_auth', $auth);
    session('user_auth_sign', data_auth_sign($auth)); 
  }
 
  /*
  * 用户注册 
  */
  public function signup(){
    if(is_user_login()){
      $this->redirect('Index/index');
    }
    if(IS_GET){
      //注册页面
      $this->display();
    }
    if(IS_POST){
      //判断用户 
      $data['num'] = I('num') ; 
      $User = M('user') ;
      $datanum = $User->where($data)->find();
      if ($datanum){
        $this->success('您已经注册过,请直接登录',U('signin'));
      }else{
        $data['password'] = md5(I('password')); 
        $data['name']  = I('name');
        $data['email']  = I('email');
        $data['addtime'] = time();
        $uid = $User->add($data);
        if($uid) 
          $this->success('注册成功',U('signin')) ; 
        else  
          $this->error('注册失败') ; 
      }
    }
  }
 
  public function logout(){
    if(is_user_login()){
      $User = M('user') ;
      session('user_auth', null);
      session('user_auth_sign', null);
      session('[destroy]');
      $this->success('登出成功!', U('signin'));
    } else {
      $this->redirect('signin');
    }
  }
 
  //忘记密码
  public function wjpas(){ 
    if(IS_GET){ 
      $this->display();
    } 
    if(IS_POST){
      $User = M('user') ;
      $num = I('num') ;
      $data['password'] = md5(I('password')) ; 
      $email = I('email') ;
      $datanum = $User->where(array('num'=>$num))->find();
      if ($datanum){
        if ($email === $datanum['email']) {
          $User->where(array('num'=>$num))->save($data); // 根据条件更新记录
          $this->success('密码修改成功',U('signin')) ; 
        }else{
          $this->error('邮箱填写不正确,请重新填写'); 
          exit();
        }
      }else{
        $this->error('用户不存在,请注册',U('signup'));
      }
    }
  }
}
?>

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

PHP 相关文章推荐
简化php模板页面中分页代码的解析
Feb 06 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
Laravel 5框架学习之子视图和表单复用
Apr 09 PHP
php使用Jpgraph绘制饼状图的方法
Jun 10 PHP
php实现的二分查找算法示例
Jun 20 PHP
浅谈php的TS和NTS的区别
Mar 13 PHP
PHP实现的策略模式示例
Mar 20 PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 PHP
非常有用的9个PHP代码片段
Apr 06 #PHP
10个对初学者非常有用的PHP技巧
Apr 06 #PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 #PHP
PHP实现的DES加密解密实例代码
Apr 06 #PHP
php使用正则验证中文
Apr 06 #PHP
php HTML无刷新提交表单
Apr 05 #PHP
PHP如何使用Memcached
Apr 05 #PHP
You might like
织梦模板标记简介
2007/03/11 PHP
php中的异常和错误浅析
2017/05/03 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
Python类的基础入门知识
2008/11/24 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
python字典的常用操作方法小结
2016/05/16 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
Django框架封装外部函数示例
2019/05/28 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
django API 中接口的互相调用实例
2020/04/01 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
优秀纪检干部材料
2014/08/27 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
单位接收函范文
2015/01/30 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
运动会通讯稿100字
2015/07/20 职场文书
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题