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