Jump to content
Sign in to follow this  
KirKMS

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

Recommended Posts

Всем привет. Ловите от меня свежий модуль для 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.

  • Upvote 3

Share this post


Link to post
Share on other sites

# 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 Можешь ребятам сделать инструкцию 

Edited by Edward Nemirovskiy

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×