request = is_null($request) ? Request::instance() : $request; $this->page = input('page',1); $this->listrow= input('listrow',10); // 控制器初始化 $this->_initialize(); //验证后台用户和密码 $this->admin_login(); } /** * 初始化操作 * @access protected */ protected function _initialize() { //移除HTML标签 $this->request->filter('trim,strip_tags,htmlspecialchars'); } /** * 管理员登录 * * @param string $username 用户名 * @param string $password 密码 * @param int $keeptime 有效时长 * @return boolean */ public function auth_login($username, $password, $keeptime = 0) { $admin = Admin::get(['username' => $username]); if (!$admin) { $this->setError('Username is incorrect'); return false; } if ($admin['status'] == 'hidden') { $this->setError('Admin is forbidden'); return false; } if (Config::get('fastadmin.login_failure_retry') && $admin->loginfailure >= 10 && time() - $admin->updatetime < 86400) { $this->setError('Please try again after 1 day'); return false; } if ($admin->password != md5(md5($password) . $admin->salt)) { $admin->loginfailure++; $admin->save(); $this->setError('Password is incorrect'); return false; } $admin->loginfailure = 0; $admin->logintime = time(); $admin->loginip = request()->ip(); $admin->save(); //登录关键 $this->admin_uid = $admin->id; return true; } /** * 设置错误信息 * * @param string $error 错误信息 * @return Auth */ public function setError($error) { $this->_error = $error; return $this; } /** * 获取错误信息 * @return string */ public function getError() { return $this->_error ? __($this->_error) : ''; } public function admin_login() { if ($this->request->isPost()) { $username = $this->request->post('username'); $password = $this->request->post('password'); $rule = [ 'username' => 'require|length:3,30', 'password' => 'require|length:3,30', ]; $data = [ 'username' => $username, 'password' => $password, ]; $validate = new Validate($rule, [], ['username' => '用户名', 'password' => '密码']); $result = $validate->check($data); if (!$result) { $this->error($validate->getError()); } $result = $this->auth_login($username, $password, 0); if ($result === true) { return $this->admin_uid; } else { $msg = $this->getError(); $msg = $msg ? $msg : __('Username or password is incorrect'); $this->error($msg); } }else{ $this->error('no post'); } } //接口 public function index(){ $admin_uid = $this->admin_uid; $this->success('success',$admin_uid); } /** * 操作成功返回的数据 * @param string $msg 提示信息 * @param mixed $data 要返回的数据 * @param int $code 错误码,默认为1 * @param string $type 输出类型 * @param array $header 发送的 Header 信息 */ protected function success($msg = '', $data = null, $code = 1, $type = null, array $header = []) { if(empty($msg)){ $msg = '操作成功'; } $this->result($msg, $data, $code, $type, $header); } //find查询出来的结果如果为空数组,强制转换object protected function success_find($msg = '', $data = null, $code = 1, $type = null, array $header = []) { if(empty($msg)){ $msg = '操作成功'; } if(is_null($data) || $data === []){ $data = (object)[]; } $this->result($msg, $data, $code, $type, $header); } /** * 操作失败返回的数据 * @param string $msg 提示信息 * @param mixed $data 要返回的数据 * @param int $code 错误码,默认为0 * @param string $type 输出类型 * @param array $header 发送的 Header 信息 */ protected function error($msg = '', $data = null, $code = 0, $type = null, array $header = []) { if(empty($msg)){ $msg = __('Invalid parameters'); } $this->result($msg, $data, $code, $type, $header); } /** * 返回封装后的 API 数据到客户端 * @access protected * @param mixed $msg 提示信息 * @param mixed $data 要返回的数据 * @param int $code 错误码,默认为0 * @param string $type 输出类型,支持json/xml/jsonp * @param array $header 发送的 Header 信息 * @return void * @throws HttpResponseException */ protected function result($msg, $data = null, $code = 0, $type = null, array $header = []) { $result = [ 'code' => $code, 'msg' => $msg, 'time' => Request::instance()->server('REQUEST_TIME'), 'data' => $data, ]; // 如果未设置类型则自动判断 $type = $type ? $type : ($this->request->param(config('var_jsonp_handler')) ? 'jsonp' : $this->responseType); if (isset($header['statuscode'])) { $code = $header['statuscode']; unset($header['statuscode']); } else { //未设置状态码,根据code值判断 $code = $code >= 1000 || $code < 200 ? 200 : $code; } $response = Response::create($result, $type, $code)->header($header); throw new HttpResponseException($response); } }