ThinkPHP5.1 기반 돌핀 백그라운드 로그인 소스코드 분석
thinkphp5.1
thinkphp5.1을 기반으로 한 돌핀 백그라운드 로그인 소스 코드 분석
1. 먼저 로그인 코드로 오세요. 일부 코드 스크린샷, 관심이 있으시면, 직접 가셔도 됩니다 소스코드 보세요
로그인 시 시작
public function signin() { if ($this->request->isPost()) { // 获取post数据 $data = $this->request->post(); $rememberme = isset($data['remember-me']) ? true : false; // 登录钩子, 做一些登录前动作, 这里暂时没有实现 $hook_result = Hook::listen('signin', $data); if (!empty($hook_result) && true !== $hook_result[0]) { $this->error($hook_result[0]); } // 验证数据 $result = $this->validate($data, 'User.signin'); if(true !== $result){ // 验证失败 输出错误信息 $this->error($result); } // 验证码 if (config('captcha_signin')) { $captcha = $this->request->post('captcha', ''); $captcha == '' && $this->error('请输入验证码'); if(!captcha_check($captcha, '')){ //验证失败 $this->error('验证码错误或失效'); }; } // 登录 $UserModel = new UserModel模型分析; // 进去模型逻辑 $uid = $UserModel->login($data['username'], $data['password'], $rememberme); if ($uid) { // 记录行为 action_log('user_signin', 'admin_user', $uid, $uid); $this->jumpUrl(); } else { $this->error($UserModel->getError()); } } else { // 下面是单点登录的钩子,目前后台不支持 $hook_result = Hook::listen('signin_sso'); if (!empty($hook_result) && true !== $hook_result[0]) { if (isset($hook_result[0]['url'])) { $this->redirect($hook_result[0]['url']); } if (isset($hook_result[0]['error'])) { $this->error($hook_result[0]['error']); } } if (is_signin()) { $this->jumpUrl(); } else { return $this->fetch(); }} }
로그인 후 복사
UserModel 모델 분석 입력
$UserModel = new UserModel; // 调用模型中的Login登录, 账号 密码 是否记住我 $uid = $UserModel->login($data['username'], $data['password'], $rememberme); public function login($username = '', $password = '', $rememberme = false)\ { $username = trim($username); $password = trim($password); // 匹配登录方式 if (preg_match("/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/", $username)) { // 邮箱登录 $map['email'] = $username; } elseif (preg_match("/^1\d{10}$/", $username)) { // 手机号登录 $map['mobile'] = $username; } else { // 用户名登录 $map['username'] = $username; } $map['status'] = 1; // 查找用户 $user = $this::get($map); if (!$user) { $this->error = '用户不存在或被禁用!'; } else { // 检查是否分配用户组 if ($user['role'] == 0) { $this->error = '禁止访问,原因:未分配角色!'; return false; } // 检查是可登录后台 if (!RoleModel::where(['id' => $user['role'], 'status' => 1])->value('access')) { $this->error = '禁止访问,用户所在角色未启用或禁止访问后台!'; return false; } if (!Hash::check((string)$password, $user['password'])) { $this->error = '账号或者密码错误!'; } else { $uid = $user['id']; // 更新登录信息 $user['last_login_time'] = request()->time(); $user['last_login_ip'] = request()->ip(1); if ($user->save()) { // 自动登录 return $this->autoLogin($this::get($uid), $rememberme); } else { // 更新登录信息失败 $this->error = '登录信息更新失败,请重新登录!'; return false; } } } return false; }
로그인 후 복사
각종 권한 확인 후 로그인 시작 # 🎜🎜#
public function autoLogin($user, $rememberme = false) { // 记录登录SESSION和COOKIES $auth = array( 'uid' => $user->id, 'group' => $user->group, 'role' => $user->role, 'role_name' => Db::name('admin_role')->where('id', $user->role)->value('name'), 'avatar' => $user->avatar, 'username' => $user->username, 'nickname' => $user->nickname, 'last_login_time' => $user->last_login_time, 'last_login_ip' => get_client_ip(1), ); session('user_auth', $auth); // 默认保存session session('user_auth_sign', data_auth_sign($auth)); //参数进行加密 // 保存用户节点权限, 方面后期直接用 if ($user->role != 1) { $menu_auth = Db::name('admin_role')->where('id', session('user_auth.role'))->value('menu_auth'); $menu_auth = json_decode($menu_auth, true); if (!$menu_auth) { session('user_auth', null); session('user_auth_sign', null); $this->error = '未分配任何节点权限!'; return false; } } // 记住登录 if ($rememberme) { // 存储的cookie data_auth_sign 对signin 进行加密 $signin_token = $user->username.$user->id.$user->last_login_time; cookie('uid', $user->id, 24 * 3600 * 7); cookie('signin_token', data_auth_sign($signin_token), 24 * 3600 * 7); } return $user->id; //登录成功返回uid }
로그인 후 복사
function data_auth_sign($data = []) { // 数据类型检测 if(!is_array($data)){ $data = (array)$data; } // 排序 ksort($data); // url编码并生成query字符串 $code = http_build_query($data); // 生成签名 $sign = sha1($code); return $sign; } 登录后进行登录行为记录,大家可以根据自己需求选择是否记录 最后进行登陆后跳转,分析用户可以跳转的 url private function jumpUrl() { if (session('user_auth.role') == 1) { // 判断是否管理员 $this->success('登录成功', url('admin/index/index')); } // 是否有指定默认跳转模块 $default_module = RoleModel::where('id', session('user_auth.role'))->value('default_module'); $menu = MenuModel::get($default_module); if (!$menu) { $this->error('当前角色未指定默认跳转模块!'); } if ($menu['url_type'] == 'link') { $this->success('登录成功', $menu['url_value']); } $menu_url = explode('/', $menu['url_value']); role_auth(); $url = action('admin/ajax/getSidebarMenu', ['module_id' => $default_module, 'module' => $menu['module'], 'controller' => $menu_url[1]]); if ($url == '') { $this->error('权限不足'); } else { $this->success('登录成功', $url); } }
로그인 후 복사
위 내용은 ThinkPHP5.1 기반 돌핀 백그라운드 로그인 소스코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사
어 ass 신 크리드 그림자 : 조개 수수께끼 솔루션
3 몇 주 전
By DDD
Windows 11 KB5054979의 새로운 기능 및 업데이트 문제를 해결하는 방법
2 몇 주 전
By DDD
Atomfall에서 크레인 제어 키 카드를 찾을 수 있습니다
3 몇 주 전
By DDD
<s> : 데드 레일 - 모든 도전을 완료하는 방법
4 몇 주 전
By DDD
Atomfall Guide : 항목 위치, 퀘스트 가이드 및 팁
4 몇 주 전
By DDD

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제
Gmail 이메일의 로그인 입구는 어디에 있나요?
7667
15


Cakephp 튜토리얼
1393
52


C# 튜토리얼
1205
24


Steam의 계정 이름 형식은 무엇입니까?
91
11


Win11 활성화 키 영구
73
19

