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 24 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
smarty自定义函数htmlcheckboxes用法实例
Jan 22 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
实例讲解php实现多线程
Jan 27 PHP
PHP PDOStatement::execute讲解
Jan 31 PHP
Yii框架小部件(Widgets)用法实例详解
May 15 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
php短信接口代码
2016/05/13 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
Laravel使用RabbitMQ的方法示例
2019/06/18 PHP
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
js中的闭包学习心得
2018/02/06 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
会议邀请书范文
2014/02/02 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
临床医学专业求职信
2014/08/08 职场文书
迎国庆演讲稿
2014/09/05 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
借条格式范本
2015/05/25 职场文书
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android
Pygame Rect区域位置的使用(图文)
2021/11/17 Python
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP