'require|in:' . AdminTerminalEnum::PC . ',' . AdminTerminalEnum::MOBILE, 'account' => 'require', 'password' => 'require|password', ]; protected $message = [ 'account.require' => '请输入账号', 'password.require' => '请输入密码' ]; /** * @notes @notes 密码验证 * @param $password * @param $other * @param $data * @return bool|string * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author 令狐冲 * @date 2021/7/2 14:00 */ public function password($password, $other, $data) { // 登录限制 $safetyLogin = ConfigService::get('platform', 'safety_login',1); $safetyLimit = ConfigService::get('platform', 'safety_limit',3); $safetyLimitTime = ConfigService::get('platform', 'safety_limit_time',5); $adminAccountSafeCache = new AdminAccountSafeCache(); if (1 == $safetyLogin) { $adminAccountSafeCache->count = $safetyLimit; $adminAccountSafeCache->minute = $safetyLimitTime; } //后台账号安全机制,连续输错后锁定,防止账号密码暴力破解 if (1 == $safetyLogin && !$adminAccountSafeCache->isSafe()) { return '密码连续' . $adminAccountSafeCache->count . '次输入错误,请' . $adminAccountSafeCache->minute . '分钟后重试'; } $adminInfo = Admin::where('account', '=', $data['account']) ->field(['password,disable']) ->findOrEmpty(); if ($adminInfo->isEmpty()) { return '账号不存在'; } if ($adminInfo['disable'] === 1) { return '账号已禁用'; } if (empty($adminInfo['password'])) { $adminAccountSafeCache->record(); return '账号不存在'; } $passwordSalt = Config::get('project.unique_identification'); if ($adminInfo['password'] !== create_password($password, $passwordSalt)) { $adminAccountSafeCache->record(); return '密码错误'; } $adminAccountSafeCache->relieve(); return true; } }