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图片验证码实例
Mar 21 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 PHP
yii中widget的用法
Dec 03 PHP
thinkphp备份数据库的方法分享
Jan 04 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
PHP7如何开启Opcode打造强悍性能详解
May 11 PHP
浅谈PHP匿名函数和闭包
Mar 08 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 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
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
vue实现弹幕功能
2019/10/25 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
Python操作SQLite简明教程
2014/07/10 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
Python中的面向接口编程示例详解
2021/01/17 Python
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
汽车工程专业应届生求职信
2013/10/19 职场文书
爱的教育读书笔记
2015/06/26 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫