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 相关文章推荐
笑谈配置,使用Smarty技术
Jan 04 PHP
PHP 高级课程笔记 面向对象
Jun 21 PHP
php入门教程 精简版
Dec 13 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
Jun 12 PHP
php二维码生成
Oct 19 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
php 实现301重定向跳转实例代码
Jul 18 PHP
PHP类型约束用法示例
Sep 28 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 PHP
PHP实现微信公众号验证Token的示例代码
Dec 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
php处理restful请求的路由类分享
2014/02/27 PHP
php实现生成验证码实例分享
2016/04/10 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
php微信开发之谷歌测距
2018/06/14 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
基于node实现websocket协议
2016/04/25 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
Python中集合类型(set)学习小结
2015/01/28 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
质检部岗位职责
2013/11/11 职场文书
加拿大留学自荐信
2014/01/28 职场文书
群众路线对照检查材料
2014/09/22 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
绿里奇迹观后感
2015/06/15 职场文书
周一问候语大全
2015/11/10 职场文书
评测 | 大屏显示带收音机的高端音箱,JBL TUNE2便携式插卡音箱实测
2021/04/24 无线电
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
golang为什么要统一错误处理
2022/04/03 Golang