项目登陆功能的总体架设
来源:互联网 发布:maven 打包 java 工程 编辑:程序博客网 时间:2024/06/03 22:59
登陆功能是项目中最基本的功能,说简单也简单,可是也不是那么简单,还是架构问题吧!
登陆是一个项目的入口,是基础,我们应该怎么架构这个问题,下面看看我的方法:
1.毫无疑问,是我们的登陆的控制器
public function doLogin() { // 验证令牌 $this->checkFormToken(); // 密码登录 /** @var AuthService $auth_service */ $auth_service = D('Auth', 'Service'); list($code, $message, $manager) = $auth_service->doLoginPassword(I('username'), I('password')); if ( $code < 0 ) { return $this->ajaxResponseToken($code, $message); } $manager_model = D('Manager'); $info = array('last_login_ip' => get_client_ip(), 'last_login_time' => datetime(), 'relogin' => 0); $manager_model->updateManagerById($manager['manager_id'], $info); // 设置会话数据 session('manager', $manager); session('manager_id', $manager['manager_id']); session('menu_list', NULL); $this->ajaxResponse(0, '登录成功!'); }
2.涉及到我们登陆的服务层
public function doLoginPassword($username, $password) { if ( empty($username) ) { return array(-1, '请输入账号!', []); } if ( empty($password) ) { return array(-2, '密码不能为空!', []); } $login_log_model = D('LoginLog'); $fail_count = $login_log_model->getLoginFailNum($username, day()); if ( $fail_count >= C('MAX_LOGIN_FAIL_NUMBER') ) { return array(-1, "您今日已经达到错误登陆的次数上限,每天最多 ".C('MAX_LOGIN_FAIL_NUMBER')." 次", []); } $manager_model = D('Manager'); $manager = $manager_model->getManagerByUsername($username); if ( empty($manager) ) { return array(-1, '账号不存在!', []); } $log = array('username' => $username, 'password' => $password, 'ip' => get_client_ip(), 'ctime' => datetime()); if ( !password_verify($password, $manager['password']) ) { $log['result'] = 'fail'; $log['message'] = '密码不正确'; $login_log_model->addManagerLoginLog($log); // 添加登录日志 // TODO 用户当日输入密码错误超过一定次数则冻结账号 return array(-2, $log['message'], []); } // IP地址检查 if ( !empty($manager['allow_ip']) && !$this->isIpAllow(get_client_ip(), $manager['allow_ip']) ) { $log['result'] = 'fail'; $log['message'] = 'IP地址被限制登录'; $login_log_model->addManagerLoginLog($log); return array(-1, $log['message'], []); } // 添加登录日志 $log['result'] = 'success'; $log['message'] = '登录成功'; $login_log_model->addManagerLoginLog($log); // 账号未激活算登录成功 if ( $manager['active'] != 'Y' ) { return array(-1, '账号未激活!', []); } return array(0, '登录成功!', $manager); }
3.在服务层我们还需要一个功能就是确定当前用户的错误登陆次数,(这个我是在model控制)
public function getLoginFailNum($username, $day = NULL) { if ( empty($day) ) $day = day(); return $this->__log_model->field("id") ->where("username='%s' AND result='fail' AND ctime >= '%s' AND ctime <= '%s'", $username, $day.' 00:00:00', $day.' 23:59:59') ->count(); }
阅读全文
1 0
- 项目登陆功能的总体架设
- php项目登陆功能
- mod_jk模块的总体功能
- 仿新浪微博2014之登陆界面四(总体功能)
- 【CRM项目01】登陆功能实现
- Servlet登陆功能的实现
- 嵌入式服务器的登陆功能
- 登陆功能的代码实现
- Struts2 简单的登陆功能
- Android 登陆功能的实现。
- BIM 360 Glue API: 用cURL或PostMan实现登陆和获取项目列表的功能
- SSH网上商城项目实战 过滤器实现购物车购物登陆功能的判断。
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:2.登陆功能的实现
- 架设基于FreeRadius带有认证计费功能的Openvpn Server
- 南岭实验室的项目总体结构图及其总结与思考
- 软件项目用户验收测试的总体思路
- 一个用Lucene3.0 的搜索项目设计总体图
- 贸易时代的总结(一)--总体设计和登陆服务器
- Hadoop的理论基础来自谷歌的三大论文,以下是三大论文的中文版
- Vue.js进行查询操作
- 使用YCSB测试MongoDB的微分片性能
- 神经网络入门(三)
- iOS获取网络时间,网络获取时间,也就是现实中的时间
- 项目登陆功能的总体架设
- Python之创建tuple
- QT中的类型转换
- 多重背包 初学篇
- HDU6024 Building Shops(DP)
- [My SQL] 数据处理函数
- js ActiveXObject 调用本地程序
- mysql使用函数查询树形数据
- css3 transform做动画