From 64658fd9f2cd6d2ca868b6a1a2dc584e34bc3328 Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Wed, 27 Mar 2019 11:07:04 +0800 Subject: [PATCH] Enable reCAPTCHA on "forgot" page --- app/Http/Controllers/AuthController.php | 7 ++- resources/assets/src/views/auth/Forgot.vue | 47 ++++--------------- .../assets/tests/views/auth/Forgot.test.ts | 26 +++++----- resources/views/auth/forgot.blade.php | 8 +++- 4 files changed, 34 insertions(+), 54 deletions(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 51bb384a..cbe2562e 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -162,7 +162,12 @@ class AuthController extends Controller public function forgot() { if (config('mail.driver') != '') { - return view('auth.forgot'); + return view('auth.forgot', [ + 'extra' => [ + 'recaptcha' => option('recaptcha_sitekey'), + 'invisible' => (bool) option('recaptcha_invisible'), + ] + ]); } else { throw new PrettyPageException(trans('auth.forgot.disabled'), 8); } diff --git a/resources/assets/src/views/auth/Forgot.vue b/resources/assets/src/views/auth/Forgot.vue index ac64945b..804b684f 100644 --- a/resources/assets/src/views/auth/Forgot.vue +++ b/resources/assets/src/views/auth/Forgot.vue @@ -11,30 +11,7 @@ -
-
-
- -
-
-
- CAPTCHA -
-
+
{{ successMsg }}
{{ infoMsg }}
@@ -61,8 +38,13 @@ diff --git a/resources/assets/tests/views/auth/Forgot.test.ts b/resources/assets/tests/views/auth/Forgot.test.ts index 0f4f891a..27d805eb 100644 --- a/resources/assets/tests/views/auth/Forgot.test.ts +++ b/resources/assets/tests/views/auth/Forgot.test.ts @@ -1,12 +1,16 @@ import Vue from 'vue' import { mount } from '@vue/test-utils' import Forgot from '@/views/auth/Forgot.vue' +import { flushPromises } from '../../utils' -test('click to refresh captcha', () => { - jest.spyOn(Date, 'now') - const wrapper = mount(Forgot) - wrapper.find('img').trigger('click') - expect(Date.now).toBeCalledTimes(2) +window.blessing.extra = {} +const Captcha = Vue.extend({ + methods: { + execute() { + return Promise.resolve('captcha') + }, + refreshCaptcha() { /* */ }, + }, }) test('submit forgot form', async () => { @@ -14,7 +18,7 @@ test('submit forgot form', async () => { Vue.prototype.$http.post .mockResolvedValueOnce({ errno: 1, msg: 'fail' }) .mockResolvedValueOnce({ errno: 0, msg: 'ok' }) - const wrapper = mount(Forgot) + const wrapper = mount(Forgot, { stubs: { Captcha } }) const button = wrapper.find('button') const info = wrapper.find('.callout-info') const warning = wrapper.find('.callout-warning') @@ -31,20 +35,14 @@ test('submit forgot form', async () => { wrapper.find('[type="email"]').setValue('a@b.c') button.trigger('click') - expect(Vue.prototype.$http.post).not.toBeCalled() - expect(info.text()).toBe('auth.emptyCaptcha') - - wrapper.find('[type="text"]').setValue('captcha') - button.trigger('click') - await wrapper.vm.$nextTick() + await flushPromises() expect(Vue.prototype.$http.post).toBeCalledWith( '/auth/forgot', { email: 'a@b.c', captcha: 'captcha' } ) expect(warning.text()).toBe('fail') - expect(Date.now).toBeCalledTimes(2) button.trigger('click') - await wrapper.vm.$nextTick() + await flushPromises() expect(success.text()).toBe('ok') }) diff --git a/resources/views/auth/forgot.blade.php b/resources/views/auth/forgot.blade.php index 56d7f35b..fc182a44 100644 --- a/resources/views/auth/forgot.blade.php +++ b/resources/views/auth/forgot.blade.php @@ -22,5 +22,11 @@ - +@include('common.recaptcha') + @endsection