From 289b36d9d0d9f2539a4792d53d24c651ba26d6fb Mon Sep 17 00:00:00 2001 From: Bubka <858858+Bubka@users.noreply.github.com> Date: Mon, 13 Jan 2020 22:24:14 +0100 Subject: [PATCH] Check user count to prevent more than one registered user --- app/Http/Controllers/UserController.php | 23 ++++++++++++++++++++++ resources/js/app.js | 6 ++++++ resources/js/views/Error.vue | 14 ++++++------- resources/js/views/Register.vue | 21 +++++++++++++++++++- resources/js/vue-i18n-locales.generated.js | 5 ++++- resources/lang/en/auth.php | 2 +- resources/lang/en/errors.php | 3 +++ routes/api.php | 1 + 8 files changed, 64 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 701b7a61..387a1d36 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -5,6 +5,7 @@ use App\User; use Validator; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; @@ -56,6 +57,20 @@ public function logout() } + /** + * check if a user exists + * @param Request $request [description] + * @return json + */ + public function checkUser() + { + + $count = DB::table('users')->count(); + + return response()->json(['userCount' => $count], 200); + } + + /** * register new user * @param Request $request [description] @@ -63,6 +78,14 @@ public function logout() */ public function register(Request $request) { + + // check if a user already exists + $count = DB::table('users')->count(); + + if( $count > 0 ) { + return response()->json(['error' => __('already_one_user_registered')], 400); + } + $validator = Validator::make($request->all(), [ 'name' => 'required', 'email' => 'required|email', diff --git a/resources/js/app.js b/resources/js/app.js index db9416c4..f70b5a2c 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -59,6 +59,12 @@ const router = new VueRouter({ name: 'edit', component: Edit, }, + { + path: '/flooded', + name: 'flooded', + component: NotFound, + props: true + }, { path: '/error', name: 'GenericError', diff --git a/resources/js/views/Error.vue b/resources/js/views/Error.vue index 020929a6..e2d6ae58 100644 --- a/resources/js/views/Error.vue +++ b/resources/js/views/Error.vue @@ -5,6 +5,12 @@

{{ $t('errors.resource_not_found') }}{{ $t('errors.refresh') }}

+
+

+

{{ $t('errors.already_one_user_registered') }}
+ {{ $t('errors.cannot_register_more_user') }}

+ {{ $t('errors.please') }}{{ $t('auth.sign_in') }}

+

{{ $t('errors.error_occured') }}{{ $t('errors.refresh') }}

@@ -50,14 +56,6 @@ this.$router.push({name: 'accounts' }); }); - }, - - beforeRouteEnter (to, from, next) { - if ( ! localStorage.getItem('jwt')) { - return next('login') - } - - next() } } diff --git a/resources/js/views/Register.vue b/resources/js/views/Register.vue index 0fcc1f9a..b2440f6c 100644 --- a/resources/js/views/Register.vue +++ b/resources/js/views/Register.vue @@ -38,6 +38,10 @@
+
+ + {{ errorMessage }} +
@@ -58,10 +62,25 @@ email : '', password : '', password_confirmation : '', - errors: {} + errors: {}, + errorMessage: '' } }, + created: function() { + // we check if a user account already exists + axios.post('api/checkuser') + .then(response => { + if( response.data.userCount > 0) { + this.errorMessage = this.$t('errors.already_one_user_registered') + ' ' + this.$t('errors.cannot_register_more_user') + this.$router.push({ name: 'flooded' }); + } + }) + .catch(error => { + this.$router.push({ name: 'error', params: { err: error.response.message } }); + }); + }, + methods : { handleSubmit(e) { e.preventDefault() diff --git a/resources/js/vue-i18n-locales.generated.js b/resources/js/vue-i18n-locales.generated.js index 98fb11a7..68aaa2cf 100644 --- a/resources/js/vue-i18n-locales.generated.js +++ b/resources/js/vue-i18n-locales.generated.js @@ -14,7 +14,7 @@ export default { "email": "Email", "password": "Password", "confirm_password": "Confirm password", - "dont_have_account_yet": "Don't have an account yet?", + "dont_have_account_yet": "Don't have your account yet?", "already_register": "Already registered?", "passwords_do_not_match": "Passwords do not match" } @@ -25,7 +25,10 @@ export default { "errors": { "resource_not_found": "Resource not found, please ", "error_occured": "An error occured, please ", + "already_one_user_registered": "There is already a registered user.", + "cannot_register_more_user": "You cannot register more than one user.", "refresh": "refresh", + "please": "Please ", "response": { "no_valid_totp": "No valid TOTP resource in this QR code" } diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index 44bff63c..7b22b140 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -26,7 +26,7 @@ 'email' => 'Email', 'password' => 'Password', 'confirm_password' => 'Confirm password', - 'dont_have_account_yet' => 'Don\'t have an account yet?', + 'dont_have_account_yet' => 'Don\'t have your account yet?', 'already_register' => 'Already registered?', 'passwords_do_not_match' => 'Passwords do not match', ] diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index 43eb2279..f266dc90 100644 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -15,7 +15,10 @@ 'resource_not_found' => 'Resource not found, please ', 'error_occured' => 'An error occured, please ', + 'already_one_user_registered' => 'There is already a registered user.', + 'cannot_register_more_user' => 'You cannot register more than one user.', 'refresh' => 'refresh', + 'please' => 'Please ', 'response' => [ 'no_valid_totp' => 'No valid TOTP resource in this QR code', ] diff --git a/routes/api.php b/routes/api.php index e5fc55cd..8a423b97 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,6 +14,7 @@ */ Route::post('login', 'UserController@login'); +Route::post('checkuser', 'UserController@checkUser'); Route::post('register', 'UserController@register'); Route::group(['middleware' => 'auth:api'], function(){