Просмотр исходного кода

添加注册界面验证码和sql语句文件

MIse 7 лет назад
Родитель
Сommit
9dddfb4546

+ 35 - 5
app/Http/Controllers/AuthController.php

@@ -83,7 +83,7 @@ class AuthController extends Controller
                 case 3:
                     // Google reCAPTCHA
                     $result = $this->validate($request,[
-                        'g-recaptcha-response' => 'required|captcha'
+                        'g-recaptcha-response' => 'required|NoCaptcha'
                     ]);
                     
                     if (!$result) {
@@ -256,10 +256,40 @@ class AuthController extends Controller
                     $verifyCode->save();
                 }
             } elseif (self::$systemConfig['is_captcha']) { // 是否校验验证码
-                if (!Captcha::check($captcha)) {
-                    Session::flash('errorMsg', '验证码错误,请重新输入');
-
-                    return Redirect::back()->withInput($request->except(['captcha']));
+                switch (self::$systemConfig['is_captcha']) {
+                    case 1:
+                        // Default Captcha
+                        if (!Captcha::check($captcha)) {
+                            Session::flash('errorMsg', '验证码错误,请重新输入');
+                            return Redirect::back()->withInput();
+                        }
+                        break;
+                    case 2:
+                        // Geetest
+                        $result = $this->validate($request, [
+                            'geetest_challenge' => 'required|geetest'
+                        ], [
+                            'geetest' => trans('login.fail_captcha')
+                        ]);
+
+                        if (!$result) {
+                            Session::flash('errorMsg', trans('login.fail_captcha'));
+                            return Redirect::back()->withInput();
+                        }
+                        break;
+                    case 3:
+                        // Google reCAPTCHA
+                        $result = $this->validate($request,[
+                            'g-recaptcha-response' => 'required|NoCaptcha'
+                        ]);
+                        if (!$result) {
+                            Session::flash('errorMsg', trans('login.fail_captcha'));
+                            return Redirect::back()->withInput();
+                        }
+                        break;
+                    default:
+                        # nothing..
+                        break;
                 }
             }
 

+ 5 - 5
composer.lock

@@ -2369,16 +2369,16 @@
         },
         {
             "name": "misechow/no-captcha",
-            "version": "v1.0.1",
+            "version": "v1.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/MIseChow/laravel-reCAPTCHA.git",
-                "reference": "f01633ce6dfac5484e26ac5fc18f60fd60d42349"
+                "reference": "962aedaaa8c4a0a77b41472148df938f2ba5c005"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/MIseChow/laravel-reCAPTCHA/zipball/f01633ce6dfac5484e26ac5fc18f60fd60d42349",
-                "reference": "f01633ce6dfac5484e26ac5fc18f60fd60d42349",
+                "url": "https://api.github.com/repos/MIseChow/laravel-reCAPTCHA/zipball/962aedaaa8c4a0a77b41472148df938f2ba5c005",
+                "reference": "962aedaaa8c4a0a77b41472148df938f2ba5c005",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -2430,7 +2430,7 @@
                 "no-captcha",
                 "recaptcha"
             ],
-            "time": "2019-03-20T06:17:09+00:00"
+            "time": "2019-03-21T02:33:58+00:00"
         },
         {
             "name": "mobiledetect/mobiledetectlib",

+ 0 - 0
config/reCaptcha.php → config/NoCaptcha.php


+ 13 - 0
resources/views/auth/login.blade.php

@@ -2,6 +2,19 @@
 @section('title', trans('login.title'))
 @section('css')
     <link href="/assets/pages/css/login-2.min.css" rel="stylesheet" type="text/css" />
+    <style>
+        @media screen and (max-height: 950px){  
+            .g-recaptcha {
+                -webkit-transform:scale(0.81);
+                transform:scale(0.81);
+                -webkit-transform-origin:0 0; 
+                transform-origin:0 0;
+            }
+        }  
+        .geetest_holder.geetest_wind {
+            min-width: 245px !important;
+        }
+    </style>
 @endsection
 @section('content')
     <!-- BEGIN LOGIN FORM -->

+ 68 - 7
resources/views/auth/register.blade.php

@@ -2,10 +2,23 @@
 @section('title', trans('register.title'))
 @section('css')
     <link href="/assets/pages/css/login-2.min.css" rel="stylesheet" type="text/css" />
+    <style>
+        @media screen and (max-height: 950px){  
+            .g-recaptcha {
+                -webkit-transform:scale(0.81);
+                transform:scale(0.81);
+                -webkit-transform-origin:0 0; 
+                transform-origin:0 0;
+            }
+        }  
+        .geetest_holder.geetest_wind {
+            min-width: 245px !important;
+        }
+    </style>
 @endsection
 @section('content')
     <!-- BEGIN REGISTRATION FORM -->
-    <form class="register-form" action="{{url('register')}}" method="post" style="display: block;">
+    <form class="register-form" id="register-form" action="{{url('register')}}" method="post" style="display: block;">
         @if(\App\Components\Helpers::systemConfig()['is_register'])
             @if(Session::get('errorMsg'))
                 <div class="alert alert-danger">
@@ -44,12 +57,32 @@
                     <p class="hint"> <a href="{{url('free')}}" target="_blank">{{trans('register.get_free_code')}}</a> </p>
                 @endif
             @endif
-            @if(!\App\Components\Helpers::systemConfig()['is_verify_register'] && \App\Components\Helpers::systemConfig()['is_captcha'])
-                <div class="form-group" style="margin-bottom:75px;">
-                    <label class="control-label visible-ie8 visible-ie9">{{trans('register.captcha')}}</label>
-                    <input class="form-control placeholder-no-fix" style="width:60%;float:left;" type="text" autocomplete="off" placeholder="{{trans('register.captcha')}}" name="captcha" value="" required />
-                    <img src="{{captcha_src()}}" onclick="this.src='/captcha/default?'+Math.random()" alt="{{trans('register.captcha')}}" style="float:right;" />
-                </div>
+            @if(!\App\Components\Helpers::systemConfig()['is_verify_register'])
+                @switch(\App\Components\Helpers::systemConfig()['is_captcha'])
+                    @case(1)
+                        <!-- Default Captcha -->
+                        <div class="form-group" style="margin-bottom:75px;">
+                            <label class="control-label visible-ie8 visible-ie9">{{trans('register.captcha')}}</label>
+                            <input class="form-control placeholder-no-fix" style="width:60%;float:left;" type="text" autocomplete="off" placeholder="{{trans('register.captcha')}}" name="captcha" value="" required />
+                            <img src="{{captcha_src()}}" onclick="this.src='/captcha/default?'+Math.random()" alt="{{trans('register.captcha')}}" style="float:right;" />
+                        </div>
+                        @break
+                    @case(2)
+                        <!-- Geetest -->
+                        <div class="form-group">
+                            {!! Geetest::render() !!}
+                        </div>
+                        @break
+                    @case(3)
+                        <!-- Google noCAPTCHA -->
+                        <div class="form-group">
+                            {!! NoCaptcha::display() !!}
+                            {!! NoCaptcha::renderJs(session::get('locale')) !!}
+                        </div>
+                        @break
+                    @default
+                        @break
+                @endswitch
             @endif
             <div class="form-group margin-top-20 margin-bottom-20">
                 <label class="mt-checkbox mt-checkbox-outline">
@@ -152,5 +185,33 @@
                 }, 1000);
             }
         }
+
+        $('#register-form').submit(function(event){
+            // 先检查Google reCAPTCHA有没有进行验证
+            if ( $('#g-recaptcha-response').val() === '' ) {
+                Msg(false, "{{trans('login.required_captcha')}}", 'error');
+                return false;
+            }
+        })
+
+        // 生成提示
+        function Msg(clear, msg, type) {
+            if ( !clear ) $('.register-form .alert').remove();
+            
+            var typeClass = 'alert-danger',
+                clear = clear ? clear : false,
+                $elem = $('.register-form');
+            type === 'error' ? typeClass = 'alert-danger' : typeClass = 'alert-success';
+
+            var tpl = '<div class="alert ' + typeClass + '">' +
+                    '<button type="button" class="close" onclick="$(this).parent().remove();"></button>' +
+                    '<span> ' + msg + ' </span></div>';
+            
+            if ( !clear ) {
+                $elem.prepend(tpl);
+            } else {
+                $('.register-form .alert').remove();
+            }
+        }
     </script>
 @endsection

+ 4 - 4
resources/views/vendor/geetest/geetest.blade.php

@@ -38,18 +38,18 @@
                     new_captcha: data.new_captcha,  // 用于宕机时表示是新验证码的宕机
                     lang: '{{session::get('locale')}}',
                     http: '{{ Config::get('geetest.protocol', 'http') }}' + '://',
-                    // width: '100%'
+                    width: '100%'
                 }, handlerEmbed);
             }
         });
     };
 
     function Msg(clear, msg, type) {
-        if ( !clear ) $('.login-form .alert').remove();
+        if ( !clear ) $('.login-form .alert, .register-form .alert').remove();
         
         var typeClass = 'alert-danger',
             clear = clear ? clear : false,
-            $elem = $('.login-form');
+            $elem = $('.login-form, .register-form');
         type === 'error' ? typeClass = 'alert-danger' : typeClass = 'alert-success';
 
         var tpl = '<div class="alert ' + typeClass + '">' +
@@ -59,7 +59,7 @@
         if ( !clear ) {
             $elem.prepend(tpl);
         } else {
-            $('.login-form .alert').remove();
+            $('.login-form .alert, .register-form .alert').remove();
         }
     }
 

+ 5 - 0
sql/update/20190321.sql

@@ -0,0 +1,5 @@
+-- 增加 Geetest验证 和 Google reCAPTCHA验证 选项
+INSERT INTO `config` VALUES ('90', 'geetest_id', '');
+INSERT INTO `config` VALUES ('91', 'geetest_key', '');
+INSERT INTO `config` VALUES ('92', 'google_captcha_sitekey', '');
+INSERT INTO `config` VALUES ('93', 'google_captcha_secret', '');