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序列号生成函数和字符串替换函数代码
Jun 07 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
PHP简单实现循环链表功能示例
Nov 10 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 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
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
详解Python中的序列化与反序列化的使用
2015/06/30 Python
关于Django外键赋值问题详解
2017/08/13 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
国际贸易专业个人鉴定
2014/02/22 职场文书
大学生活动总结模板
2014/07/02 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
校园广播稿精选
2014/10/01 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python