Jump to content

[Модуль]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
Link to comment
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
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...