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控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
php escape URL编码
Dec 10 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 PHP
php动态函数调用方法
May 21 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
php实现图片上传、剪切功能
May 07 PHP
php设计模式之单例模式代码
Jun 11 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
Feb 17 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 PHP
关于laravel 子查询 &amp; join的使用
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
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
实例讲解php实现多线程
2019/01/27 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
理解javascript中的闭包
2017/01/11 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
python获取本机mac地址和ip地址的方法
2015/04/29 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
python图片验证码生成代码
2016/07/02 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
Python跳出多重循环的方法示例
2019/07/03 Python
python如何变换环境
2020/07/21 Python
使用Python pip怎么升级pip
2020/08/11 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
幼师专业毕业生自荐信
2013/09/29 职场文书
写给女朋友的道歉信
2014/01/12 职场文书
五年级音乐教学反思
2014/02/06 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
物业消防安全责任书
2014/07/23 职场文书
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技