From 1c66ffda79c9252446420d7c840a35e862d4bef8 Mon Sep 17 00:00:00 2001 From: ramon crisante Date: Sat, 28 Aug 2021 11:12:34 +0200 Subject: [PATCH] Email verification is now configurable through a parameter --- .env.example | 2 + app/Http/Controllers/Api/AuthController.php | 2 +- .../Controllers/Api/RegisterController.php | 4 +- app/Models/User.php | 11 ++ config/auth.php | 2 + public/css/app.css | 168 +++++++++--------- .../resources_js_views_register_index_vue.js | 15 +- resources/js/views/register/index.vue | 16 +- resources/views/welcome.blade.php | 2 +- routes/api.php | 4 +- 10 files changed, 133 insertions(+), 93 deletions(-) diff --git a/.env.example b/.env.example index 18cb6cd..3d493da 100644 --- a/.env.example +++ b/.env.example @@ -49,3 +49,5 @@ PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +MUST_VERIFY_EMAIL= \ No newline at end of file diff --git a/app/Http/Controllers/Api/AuthController.php b/app/Http/Controllers/Api/AuthController.php index 0fd03a6..31f1bd5 100644 --- a/app/Http/Controllers/Api/AuthController.php +++ b/app/Http/Controllers/Api/AuthController.php @@ -23,7 +23,7 @@ public function login(LoginRequest $request) $user = Auth::user(); $token = $user->createToken('API Token')->accessToken; - if (!$user->hasVerifiedEmail()) { + if (config('auth.must_verify_email') && !$user->hasVerifiedEmail()) { return response([ 'message' => 'Email must be verified.' ], 401); diff --git a/app/Http/Controllers/Api/RegisterController.php b/app/Http/Controllers/Api/RegisterController.php index 493cdf4..eedb303 100644 --- a/app/Http/Controllers/Api/RegisterController.php +++ b/app/Http/Controllers/Api/RegisterController.php @@ -21,7 +21,9 @@ public function register(RegisterRequest $request) 'password' => Hash::make($request->input('password')), ]); - event(new Registered($user)); + if (config('auth.must_verify_email')) { + event(new Registered($user)); + } return response()->json($user); } catch (\Exception $e) { diff --git a/app/Models/User.php b/app/Models/User.php index 1bbdc5d..24c899f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -12,6 +12,7 @@ class User extends Authenticatable implements MustVerifyEmail { use HasFactory, Notifiable, HasApiTokens; + protected $appends = ['must_verify_email']; /** * The attributes that are mass assignable. * @@ -42,4 +43,14 @@ class User extends Authenticatable implements MustVerifyEmail protected $casts = [ 'email_verified_at' => 'datetime', ]; + + /** + * Determine if the user is an administrator. + * + * @return bool + */ + public function getMustVerifyEmailAttribute() + { + return config('auth.must_verify_email'); + } } diff --git a/config/auth.php b/config/auth.php index 1192b86..a29fced 100644 --- a/config/auth.php +++ b/config/auth.php @@ -114,4 +114,6 @@ 'password_timeout' => 10800, + 'must_verify_email' => env('MUST_VERIFY_EMAIL', false), + ]; diff --git a/public/css/app.css b/public/css/app.css index f2e3c31..62b61c5 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -17203,133 +17203,133 @@ form.user .btn-user { @-webkit-keyframes noise-anim { 0% { - clip: rect(36px, 9999px, 58px, 0); + clip: rect(52px, 9999px, 9px, 0); } 5% { - clip: rect(60px, 9999px, 17px, 0); + clip: rect(6px, 9999px, 84px, 0); } 10% { - clip: rect(65px, 9999px, 42px, 0); + clip: rect(98px, 9999px, 29px, 0); } 15% { - clip: rect(22px, 9999px, 69px, 0); + clip: rect(38px, 9999px, 47px, 0); } 20% { - clip: rect(73px, 9999px, 70px, 0); + clip: rect(86px, 9999px, 52px, 0); } 25% { - clip: rect(57px, 9999px, 69px, 0); + clip: rect(6px, 9999px, 84px, 0); } 30% { - clip: rect(83px, 9999px, 42px, 0); + clip: rect(69px, 9999px, 14px, 0); } 35% { - clip: rect(55px, 9999px, 42px, 0); + clip: rect(97px, 9999px, 86px, 0); } 40% { - clip: rect(65px, 9999px, 56px, 0); + clip: rect(49px, 9999px, 88px, 0); } 45% { - clip: rect(10px, 9999px, 9px, 0); + clip: rect(85px, 9999px, 89px, 0); } 50% { - clip: rect(26px, 9999px, 95px, 0); + clip: rect(41px, 9999px, 23px, 0); } 55% { - clip: rect(86px, 9999px, 15px, 0); + clip: rect(56px, 9999px, 34px, 0); } 60% { - clip: rect(20px, 9999px, 9px, 0); + clip: rect(66px, 9999px, 22px, 0); } 65% { - clip: rect(11px, 9999px, 84px, 0); + clip: rect(12px, 9999px, 12px, 0); } 70% { - clip: rect(38px, 9999px, 79px, 0); + clip: rect(23px, 9999px, 38px, 0); } 75% { - clip: rect(27px, 9999px, 37px, 0); + clip: rect(64px, 9999px, 11px, 0); } 80% { - clip: rect(88px, 9999px, 27px, 0); + clip: rect(43px, 9999px, 77px, 0); } 85% { - clip: rect(64px, 9999px, 99px, 0); + clip: rect(28px, 9999px, 52px, 0); } 90% { - clip: rect(75px, 9999px, 93px, 0); + clip: rect(20px, 9999px, 55px, 0); } 95% { - clip: rect(57px, 9999px, 20px, 0); + clip: rect(12px, 9999px, 78px, 0); } 100% { - clip: rect(25px, 9999px, 100px, 0); + clip: rect(96px, 9999px, 74px, 0); } } @keyframes noise-anim { 0% { - clip: rect(36px, 9999px, 58px, 0); + clip: rect(52px, 9999px, 9px, 0); } 5% { - clip: rect(60px, 9999px, 17px, 0); + clip: rect(6px, 9999px, 84px, 0); } 10% { - clip: rect(65px, 9999px, 42px, 0); + clip: rect(98px, 9999px, 29px, 0); } 15% { - clip: rect(22px, 9999px, 69px, 0); + clip: rect(38px, 9999px, 47px, 0); } 20% { - clip: rect(73px, 9999px, 70px, 0); + clip: rect(86px, 9999px, 52px, 0); } 25% { - clip: rect(57px, 9999px, 69px, 0); + clip: rect(6px, 9999px, 84px, 0); } 30% { - clip: rect(83px, 9999px, 42px, 0); + clip: rect(69px, 9999px, 14px, 0); } 35% { - clip: rect(55px, 9999px, 42px, 0); + clip: rect(97px, 9999px, 86px, 0); } 40% { - clip: rect(65px, 9999px, 56px, 0); + clip: rect(49px, 9999px, 88px, 0); } 45% { - clip: rect(10px, 9999px, 9px, 0); + clip: rect(85px, 9999px, 89px, 0); } 50% { - clip: rect(26px, 9999px, 95px, 0); + clip: rect(41px, 9999px, 23px, 0); } 55% { - clip: rect(86px, 9999px, 15px, 0); + clip: rect(56px, 9999px, 34px, 0); } 60% { - clip: rect(20px, 9999px, 9px, 0); + clip: rect(66px, 9999px, 22px, 0); } 65% { - clip: rect(11px, 9999px, 84px, 0); + clip: rect(12px, 9999px, 12px, 0); } 70% { - clip: rect(38px, 9999px, 79px, 0); + clip: rect(23px, 9999px, 38px, 0); } 75% { - clip: rect(27px, 9999px, 37px, 0); + clip: rect(64px, 9999px, 11px, 0); } 80% { - clip: rect(88px, 9999px, 27px, 0); + clip: rect(43px, 9999px, 77px, 0); } 85% { - clip: rect(64px, 9999px, 99px, 0); + clip: rect(28px, 9999px, 52px, 0); } 90% { - clip: rect(75px, 9999px, 93px, 0); + clip: rect(20px, 9999px, 55px, 0); } 95% { - clip: rect(57px, 9999px, 20px, 0); + clip: rect(12px, 9999px, 78px, 0); } 100% { - clip: rect(25px, 9999px, 100px, 0); + clip: rect(96px, 9999px, 74px, 0); } } .error:after { @@ -17347,133 +17347,133 @@ form.user .btn-user { @-webkit-keyframes noise-anim-2 { 0% { - clip: rect(64px, 9999px, 36px, 0); + clip: rect(23px, 9999px, 14px, 0); } 5% { - clip: rect(68px, 9999px, 100px, 0); + clip: rect(10px, 9999px, 72px, 0); } 10% { - clip: rect(20px, 9999px, 61px, 0); + clip: rect(82px, 9999px, 89px, 0); } 15% { - clip: rect(53px, 9999px, 87px, 0); + clip: rect(77px, 9999px, 19px, 0); } 20% { - clip: rect(85px, 9999px, 80px, 0); + clip: rect(50px, 9999px, 72px, 0); } 25% { - clip: rect(63px, 9999px, 92px, 0); + clip: rect(28px, 9999px, 12px, 0); } 30% { - clip: rect(20px, 9999px, 17px, 0); + clip: rect(31px, 9999px, 10px, 0); } 35% { - clip: rect(38px, 9999px, 59px, 0); + clip: rect(84px, 9999px, 10px, 0); } 40% { - clip: rect(31px, 9999px, 16px, 0); + clip: rect(90px, 9999px, 57px, 0); } 45% { - clip: rect(40px, 9999px, 11px, 0); + clip: rect(46px, 9999px, 73px, 0); } 50% { - clip: rect(60px, 9999px, 22px, 0); + clip: rect(69px, 9999px, 4px, 0); } 55% { - clip: rect(91px, 9999px, 39px, 0); + clip: rect(22px, 9999px, 68px, 0); } 60% { - clip: rect(92px, 9999px, 46px, 0); + clip: rect(75px, 9999px, 61px, 0); } 65% { - clip: rect(41px, 9999px, 11px, 0); + clip: rect(64px, 9999px, 65px, 0); } 70% { - clip: rect(91px, 9999px, 10px, 0); + clip: rect(69px, 9999px, 34px, 0); } 75% { - clip: rect(56px, 9999px, 61px, 0); + clip: rect(89px, 9999px, 62px, 0); } 80% { - clip: rect(51px, 9999px, 10px, 0); + clip: rect(28px, 9999px, 39px, 0); } 85% { - clip: rect(27px, 9999px, 4px, 0); + clip: rect(29px, 9999px, 84px, 0); } 90% { - clip: rect(85px, 9999px, 75px, 0); + clip: rect(54px, 9999px, 53px, 0); } 95% { - clip: rect(85px, 9999px, 28px, 0); + clip: rect(84px, 9999px, 18px, 0); } 100% { - clip: rect(53px, 9999px, 25px, 0); + clip: rect(32px, 9999px, 40px, 0); } } @keyframes noise-anim-2 { 0% { - clip: rect(64px, 9999px, 36px, 0); + clip: rect(23px, 9999px, 14px, 0); } 5% { - clip: rect(68px, 9999px, 100px, 0); + clip: rect(10px, 9999px, 72px, 0); } 10% { - clip: rect(20px, 9999px, 61px, 0); + clip: rect(82px, 9999px, 89px, 0); } 15% { - clip: rect(53px, 9999px, 87px, 0); + clip: rect(77px, 9999px, 19px, 0); } 20% { - clip: rect(85px, 9999px, 80px, 0); + clip: rect(50px, 9999px, 72px, 0); } 25% { - clip: rect(63px, 9999px, 92px, 0); + clip: rect(28px, 9999px, 12px, 0); } 30% { - clip: rect(20px, 9999px, 17px, 0); + clip: rect(31px, 9999px, 10px, 0); } 35% { - clip: rect(38px, 9999px, 59px, 0); + clip: rect(84px, 9999px, 10px, 0); } 40% { - clip: rect(31px, 9999px, 16px, 0); + clip: rect(90px, 9999px, 57px, 0); } 45% { - clip: rect(40px, 9999px, 11px, 0); + clip: rect(46px, 9999px, 73px, 0); } 50% { - clip: rect(60px, 9999px, 22px, 0); + clip: rect(69px, 9999px, 4px, 0); } 55% { - clip: rect(91px, 9999px, 39px, 0); + clip: rect(22px, 9999px, 68px, 0); } 60% { - clip: rect(92px, 9999px, 46px, 0); + clip: rect(75px, 9999px, 61px, 0); } 65% { - clip: rect(41px, 9999px, 11px, 0); + clip: rect(64px, 9999px, 65px, 0); } 70% { - clip: rect(91px, 9999px, 10px, 0); + clip: rect(69px, 9999px, 34px, 0); } 75% { - clip: rect(56px, 9999px, 61px, 0); + clip: rect(89px, 9999px, 62px, 0); } 80% { - clip: rect(51px, 9999px, 10px, 0); + clip: rect(28px, 9999px, 39px, 0); } 85% { - clip: rect(27px, 9999px, 4px, 0); + clip: rect(29px, 9999px, 84px, 0); } 90% { - clip: rect(85px, 9999px, 75px, 0); + clip: rect(54px, 9999px, 53px, 0); } 95% { - clip: rect(85px, 9999px, 28px, 0); + clip: rect(84px, 9999px, 18px, 0); } 100% { - clip: rect(53px, 9999px, 25px, 0); + clip: rect(32px, 9999px, 40px, 0); } } .error:before { diff --git a/public/js/resources_js_views_register_index_vue.js b/public/js/resources_js_views_register_index_vue.js index 57931cd..c541152 100644 --- a/public/js/resources_js_views_register_index_vue.js +++ b/public/js/resources_js_views_register_index_vue.js @@ -171,7 +171,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar var _this = this; return _asyncToGenerator( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee() { - var response; + var response, message, toast; return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { @@ -191,7 +191,18 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar response = _context.sent; _this.isLoading = false; - _this.$router.push("/verify/user/".concat(response.data.id)); + if (response.data.must_verify_email) { + _this.$router.push("/verify/user/".concat(response.data.id)); + } else { + message = "You account has been successfully create. Please Log in."; + toast = Vue.toasted.show(message, { + theme: "toasted-primary", + position: "top-right", + duration: 5000 + }); + + _this.$router.push("/login"); + } _context.next = 13; break; diff --git a/resources/js/views/register/index.vue b/resources/js/views/register/index.vue index c74e1d0..a4e30eb 100644 --- a/resources/js/views/register/index.vue +++ b/resources/js/views/register/index.vue @@ -120,9 +120,21 @@ export default { password: this.password, password_confirm: this.password_confirm, }); - + this.isLoading = false; - this.$router.push(`/verify/user/${response.data.id}`); + + if (response.data.must_verify_email) { + this.$router.push(`/verify/user/${response.data.id}`); + } else { + let message = + "Your account has been created successfully. Please Log in."; + let toast = Vue.toasted.show(message, { + theme: "toasted-primary", + position: "top-right", + duration: 5000, + }); + this.$router.push("/login"); + } } catch (error) { notify.authError(error); this.isLoading = false; diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index 3e29b0b..47bda60 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -6,7 +6,7 @@ - LoadMe + {{ config('app.name') }} diff --git a/routes/api.php b/routes/api.php index f16eaa5..7520e5c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -20,8 +20,8 @@ Route::post('forgot', [Api\ForgotController::class, 'forgot']); Route::post('reset', [Api\ForgotController::class, 'reset']); Route::get('email/resend/{user}', [Api\VerifyController::class, 'resend'])->name('verification.resend'); - +Route::get('email/verify/{id}', [Api\VerifyController::class, 'verify'])->name('verification.verify');; // Make sure to keep this as your route name + Route::group(['middleware' => ['auth:api']], function () { - Route::get('email/verify/{id}', [Api\VerifyController::class, 'verify'])->name('verification.verify');; // Make sure to keep this as your route name Route::get('user', [Api\AuthController::class, 'user']); });