Перейти к содержанию
CMSTOOLS.org - форум поддержки и развития CMS

[Модуль]CAPTCHA при авторизации By KirKMS


Рекомендуемые сообщения

Всем привет. Ловите от меня свежий модуль для Vii-Engine.

Я не понимаю почему ещё не кто его не написал и не выложил.

При авторизации пользователя просят ввести проверочный код.

При желание можно подключить reCAPTCHA - Google.

Вот вам скрин.

image.png

 

Этап установки под спойлером.

Модуль написан на основе VII ENGINE LICENSE (NULLED) 2.1

Спойлер

Зайти в reg.js

Найти там 


//RESTORE
var restore = {

 

Вставить выше


//Модуль CAPTCHA при авторизации By KirKMS
var login = {
	send: function(){
		var log_email = $('#log_email').val();
		var log_password = $('#log_password').val();
		var rndval = new Date().getTime(); 
		    if(log_email != 0 && isValidEmailAddress(log_email)){
				if(log_password != 0){
					
					Box.Show('sec_code', 280, 'Введите код с картинки:', '<div style="padding:20px;text-align:center"><div class="cursor_pointer" onClick="updateCode(); return false"><div id="sec_code"><img src="/antibot/antibot.php?rndval=' + rndval + '" alt="" title="Показать другой код" width="120" height="50" /></div></div><div id="code_loading"><input type="text" id="val_sec_code" class="inpst" maxlength="6" style="margin-top:10px;width:110px" /></div></div>', lang_box_canсel, 'Отправить', 'checkCodeLogin(); return false;');					
				
				} else {
			        setErrorInputMsg('log_password');
			        $('#err').show().html(lang_nosymbol);
		        }
			} else {
			    setErrorInputMsg('log_email');
			    $('#err').show().html(lang_nosymbol);
		    }
	},
	finish: function(sec_code){
		var email = $('#log_email').val();
		var password = $('#log_password').val();
		var log_in = '';
		
		$.post('/index.php', {
			email: email,
			password: password,
			sec_code: sec_code,
			log_in: log_in
			
			}, function(d){
			var exp = d.split('|');
			if(exp[0] == 'ok'){
			   location.reload();
			} else
			
			if(exp[0] == 'err_mail'){
				Box.Info('boxerr', 'Ошибка', 'Проверьте правильность вводимых данных', 300);
				Box.Close('sec_code');
			} else {
				Box.Info('boxerr', 'Ошибка', 'Проверьте правильность вводимых данных', 300);
				Box.Close('sec_code');
			}
		});
		}
}

//Проверка каптчи при авторизации
function checkCodeLogin(){
	var val_sec_code = $("#val_sec_code").val();
	$('#code_loading').html('<img src="'+template_dir+'/images/loading_mini.gif" style="margin-top:21px" />');
	$.get('/antibot/sec_code.php?user_code='+val_sec_code, function(data){
		if(data == 'ok'){
			login.finish(val_sec_code);
		} else {
			updateCode();
			$('#code_loading').html('<input type="text" id="val_sec_code" class="inpst" maxlength="6" style="margin-top:10px;width:110px" />');
			$('#val_sec_code').val('');
			$('#val_sec_code').focus();
		}
	});
}

 

Далее зайти в main.tpl

Найти там 


<form method="POST" action="">

Удалить

Ниже найти


</form>

Удалить

Далее найти 


<button name="log_in" id="login_but" style="width:138px">Войти

 

Заменить на


<button onClick="login.send(); return false" style="width:138px">Войти

 

Далее зайти в файл login.php

Найти там 


if (isset($_POST['log_in']) AND !$logged) {

 

Заменить всё от скобки до скобки на 


//Если данные поступили через пост и пользователь не авторизован
//Модуль CAPTCHA при авторизации By KirKMS
if (isset($_POST['log_in']) AND !$logged) {
	NoAjaxQuery();
    //Код безопасности
    $session_sec_code = $_SESSION['sec_code'];
    $sec_code = $_POST['sec_code'];
	
	//Приготавливаем данные
    $email = textFilter(strip_tags($_POST['email']));
    $password = md5(md5(GetVar($_POST['password'])));
	
    //Если код введные юзером совпадает, то пропускаем, иначе выводим ошибку
    if ($sec_code == $session_sec_code) {
		
    //Проверяем правильность e-mail
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
         echo 'err_mail|';
    } else {
        //Считаем кол-во символов в пароле и email
        if (isset($email) AND !empty($email)) {
            $check_user = $db->super_query("SELECT user_id FROM `" . PREFIX . "_users` WHERE user_email = '" . $email . "' AND user_password = '" . $password . "'");
            //Если есть юзер то пропускаем
            if ($check_user) {

                //Hash ID
                $hid = $password . md5(md5($_IP));
                //Обновляем хэш входа
                $db->query("UPDATE `" . PREFIX . "_users` SET user_hid = '" . $hid . "' WHERE user_id = '" . $check_user['user_id'] . "'");
                //Удаляем все рание события
                $db->query("DELETE FROM `" . PREFIX . "_updates` WHERE for_user_id = '{$check_user['user_id']}'");
                //Устанавливаем в сессию ИД юзера
                $_SESSION['user_id'] = intval($check_user['user_id']);
                //Записываем COOKIE
                set_cookie("user_id", intval($check_user['user_id']), 365);
                set_cookie("password", $password, 365);
                set_cookie("hid", $hid, 365);
                //Вставляем лог в бд
                $db->query("UPDATE `" . PREFIX . "_log` SET browser = '" . $_BROWSER . "', ip = '" . $_IP . "' WHERE uid = '" . $check_user['user_id'] . "'");
                //if ($config['temp'] != 'mobile') header('Location: /u' . $check_user['user_id']);
                //header('Location: /');
				echo 'ok' ;
            } else echo 'no_val';
        }  else echo 'err_mail|';
    }
    }
    die();
}

 

Вроде всё. Наверное не чего не забыл.

Не откажусь от плюса в репу.

Если есть проблемы, то пишите.

Всем спасибо за внимание.

С уважением KirKMS.

Ссылка на комментарий
Поделиться на другие сайты

# main.tpl
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<div class="g-recaptcha" data-sitekey="ключ доступа"></div>

# reg.js
в reg.finish()

где $.post
sec_code: grecaptcha.getResponse()

# register.php
и на беке 
$responseKeys = json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.urlencode('6LdqitsZAAAAAPVQdDP4OywRl2j0BXMFKxfuV0bV').'&response='.urlencode($_POST['sec_code'])), true);
    if($responseKeys["success"]){
        код реги
   }

@KirKMS Можешь ребятам сделать инструкцию 

Изменено пользователем Edward Nemirovskiy
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...