From 4d078dc24ad66394eb5b3a7efc00ae8dad0cd9d6 Mon Sep 17 00:00:00 2001 From: Milos Holba Date: Sat, 22 May 2021 19:36:02 +0200 Subject: [PATCH] create new register route(Laravel) , create new email successfully verified route(Vue) --- .php_cs.dist => .php-cs-fixer.dist.php | 0 app/Actions/Fortify/CreateNewUser.php | 41 +++++++++++ .../Controllers/User/AccountController.php | 2 +- config/fortify.php | 2 +- config/language-translations.php | 1 + public/mix-manifest.json | 71 ++++++++++++++++++- resources/js/router.js | 9 +++ resources/js/views/Auth/SignUp.vue | 18 +++-- .../views/Auth/SuccessfullyEmailVerified.vue | 40 +++++++++++ routes/api.php | 4 ++ tests/Feature/Accounts/AuthTest.php | 2 +- tests/Feature/Accounts/UserAccountTest.php | 2 +- 12 files changed, 180 insertions(+), 12 deletions(-) rename .php_cs.dist => .php-cs-fixer.dist.php (100%) create mode 100644 resources/js/views/Auth/SuccessfullyEmailVerified.vue diff --git a/.php_cs.dist b/.php-cs-fixer.dist.php similarity index 100% rename from .php_cs.dist rename to .php-cs-fixer.dist.php diff --git a/app/Actions/Fortify/CreateNewUser.php b/app/Actions/Fortify/CreateNewUser.php index c6b11538..5c753920 100644 --- a/app/Actions/Fortify/CreateNewUser.php +++ b/app/Actions/Fortify/CreateNewUser.php @@ -4,14 +4,36 @@ namespace App\Actions\Fortify; use App\Models\User; use App\Models\Setting; use App\Models\UserSettings; +use Illuminate\Http\Request; use Illuminate\Validation\Rule; +use Illuminate\Auth\Events\Registered; use Illuminate\Support\Facades\Validator; +use Illuminate\Contracts\Auth\StatefulGuard; use Laravel\Fortify\Contracts\CreatesNewUsers; +use Laravel\Fortify\Contracts\RegisterResponse; class CreateNewUser implements CreatesNewUsers { use PasswordValidationRules; + /** + * The guard implementation. + * + * @var \Illuminate\Contracts\Auth\StatefulGuard + */ + protected $guard; + + /** + * Create a new controller instance. + * + * @param \Illuminate\Contracts\Auth\StatefulGuard $guard + * @return void + */ + public function __construct(StatefulGuard $guard) + { + $this->guard = $guard; + } + /** * Validate and create a newly registered user. * @@ -62,4 +84,23 @@ class CreateNewUser implements CreatesNewUsers return $user; } + + /** + * Create a new registered user. + * + * @param \Illuminate\Http\Request $request + * @param \Laravel\Fortify\Contracts\CreatesNewUsers $creator + * @return \Laravel\Fortify\Contracts\RegisterResponse + */ + public function store(Request $request, + CreatesNewUsers $creator): RegisterResponse + { + event(new Registered($user = $creator->create($request->all()))); + + if(! get_setting('user_verification')) { + $this->guard->login($user); + }; + + return app(RegisterResponse::class); + } } diff --git a/app/Http/Controllers/User/AccountController.php b/app/Http/Controllers/User/AccountController.php index 7dd0d6aa..fa8e418c 100644 --- a/app/Http/Controllers/User/AccountController.php +++ b/app/Http/Controllers/User/AccountController.php @@ -190,7 +190,7 @@ class AccountController extends Controller $user->markEmailAsVerified(); } - return redirect()->to('/sign-in'); + return redirect()->to('/successfully-verified'); } /** diff --git a/config/fortify.php b/config/fortify.php index b5c832a2..41f38d15 100644 --- a/config/fortify.php +++ b/config/fortify.php @@ -131,7 +131,7 @@ return [ */ 'features' => [ - Features::registration(), + // Features::registration(), //Features::resetPasswords(), // Features::emailVerification(), Features::updateProfileInformation(), diff --git a/config/language-translations.php b/config/language-translations.php index 3d33ba2c..5034c3c7 100644 --- a/config/language-translations.php +++ b/config/language-translations.php @@ -477,6 +477,7 @@ return [ 'page_not_verified.subtitle' => 'Your account is not verified. Before login, verify your account please.', 'page_not_verified.resend_text' => 'Do you want resend verification email?', 'page_not_verified.resend_button' => 'Resend verification email.', + 'page_email_successfully_verified' => 'Your account was successfully verified.', 'popup_create_folder.folder_default_name' => 'New Folder', 'popup_create_folder.label' => 'Type Name', 'popup_create_folder.placeholder' => 'Type your name', diff --git a/public/mix-manifest.json b/public/mix-manifest.json index ba645ff8..c4d632f3 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -73,7 +73,7 @@ "/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=d630c473dc6b751ec50f", "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=040a7241ea133456200c", "/chunks/sign-in.js": "/chunks/sign-in.js?id=649d051ab2fa0118f313", - "/chunks/sign-up.js": "/chunks/sign-up.js?id=f5634301e476029d6fa1", + "/chunks/sign-up.js": "/chunks/sign-up.js?id=4145fb89140eac0c34a4", "/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=7a9a78fcdfebbeff5c3d", "/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=314fdc603b7dd04d2b9d", "/chunks/subscription-service.js": "/chunks/subscription-service.js?id=de43eac3b1627e00424d", @@ -92,5 +92,72 @@ "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js?id=57c854adb91ed9a9d088", "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5e36d91.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5e36d91.js?id=170765b4fd923b62195c", "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js": "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js?id=66afa0e341251a68c3d3", - "/vendors~chunks/platform~chunks/shared.js": "/vendors~chunks/platform~chunks/shared.js?id=eb141834bc24b72d8e92" + "/vendors~chunks/platform~chunks/shared.js": "/vendors~chunks/platform~chunks/shared.js?id=eb141834bc24b72d8e92", + "/chunks/sign-up.c59b5ac2d31438ca5f36.hot-update.js": "/chunks/sign-up.c59b5ac2d31438ca5f36.hot-update.js", + "/chunks/sign-up.e3d231b81b5a9eb681de.hot-update.js": "/chunks/sign-up.e3d231b81b5a9eb681de.hot-update.js", + "/chunks/sign-up.d35f347d43ffa7864c3f.hot-update.js": "/chunks/sign-up.d35f347d43ffa7864c3f.hot-update.js", + "/chunks/sign-up.ec94f304a3aca7208549.hot-update.js": "/chunks/sign-up.ec94f304a3aca7208549.hot-update.js", + "/chunks/sign-up.eb2d418e59432d081679.hot-update.js": "/chunks/sign-up.eb2d418e59432d081679.hot-update.js", + "/chunks/sign-up.abeaff91c5d3da520dd6.hot-update.js": "/chunks/sign-up.abeaff91c5d3da520dd6.hot-update.js", + "/chunks/sign-up.bb7f3c6ead14ccf3b846.hot-update.js": "/chunks/sign-up.bb7f3c6ead14ccf3b846.hot-update.js", + "/chunks/sign-up.5e96dffbb6979d52ab6d.hot-update.js": "/chunks/sign-up.5e96dffbb6979d52ab6d.hot-update.js", + "/chunks/sign-up.ea6059d561294d0f175c.hot-update.js": "/chunks/sign-up.ea6059d561294d0f175c.hot-update.js", + "/chunks/sign-up.6c5d04f99bc69e0900d8.hot-update.js": "/chunks/sign-up.6c5d04f99bc69e0900d8.hot-update.js", + "/chunks/sign-up.e9456151e2190cebce77.hot-update.js": "/chunks/sign-up.e9456151e2190cebce77.hot-update.js", + "/js/main.4fd505890b976743ae48.hot-update.js": "/js/main.4fd505890b976743ae48.hot-update.js", + "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~7d45cb3e.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~7d45cb3e.js?id=6c5491727f3a920ce38d", + "/chunks/email-verified.js": "/chunks/email-verified.js?id=3d8c13b3e68f233a75ef", + "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~5b589b18.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~5b589b18.js?id=7b448352c80016333266", + "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~be2a8402.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~be2a8402.js?id=42c6a5198f1f189d5873", + "/chunks/email-verified.d9de5dc0550566f84e03.hot-update.js": "/chunks/email-verified.d9de5dc0550566f84e03.hot-update.js", + "/js/main.8ae97fce47fe8b6e1386.hot-update.js": "/js/main.8ae97fce47fe8b6e1386.hot-update.js", + "/chunks/email-verified.3f5c020cbaeead942c5a.hot-update.js": "/chunks/email-verified.3f5c020cbaeead942c5a.hot-update.js", + "/chunks/email-verified.697c9ec487ce1669db27.hot-update.js": "/chunks/email-verified.697c9ec487ce1669db27.hot-update.js", + "/chunks/email-verified.331b5672dee28d0f8e68.hot-update.js": "/chunks/email-verified.331b5672dee28d0f8e68.hot-update.js", + "/chunks/email-verified.5006b891b4381c807512.hot-update.js": "/chunks/email-verified.5006b891b4381c807512.hot-update.js", + "/chunks/email-verified.b984c75c9e9bd39fb790.hot-update.js": "/chunks/email-verified.b984c75c9e9bd39fb790.hot-update.js", + "/chunks/email-verified.2c63a7625aed4340c87e.hot-update.js": "/chunks/email-verified.2c63a7625aed4340c87e.hot-update.js", + "/chunks/email-verified.a4eb96e2586d2d21d2c7.hot-update.js": "/chunks/email-verified.a4eb96e2586d2d21d2c7.hot-update.js", + "/chunks/email-verified.c0e13f62c082b5f21232.hot-update.js": "/chunks/email-verified.c0e13f62c082b5f21232.hot-update.js", + "/chunks/email-verified.929803b660228a51a33e.hot-update.js": "/chunks/email-verified.929803b660228a51a33e.hot-update.js", + "/chunks/email-verified.30ea4c69a849f5d1af03.hot-update.js": "/chunks/email-verified.30ea4c69a849f5d1af03.hot-update.js", + "/chunks/email-verified.317aee1f5d84b5468533.hot-update.js": "/chunks/email-verified.317aee1f5d84b5468533.hot-update.js", + "/chunks/email-verified.87cac52d8e7387a98027.hot-update.js": "/chunks/email-verified.87cac52d8e7387a98027.hot-update.js", + "/chunks/email-verified.86296e3b44bfb1d275aa.hot-update.js": "/chunks/email-verified.86296e3b44bfb1d275aa.hot-update.js", + "/chunks/email-verified.6af0c93b2ece4fa86400.hot-update.js": "/chunks/email-verified.6af0c93b2ece4fa86400.hot-update.js", + "/chunks/email-verified.cd510a3a7213fd5b2f87.hot-update.js": "/chunks/email-verified.cd510a3a7213fd5b2f87.hot-update.js", + "/chunks/email-verified.8287bf90e76ce1280e51.hot-update.js": "/chunks/email-verified.8287bf90e76ce1280e51.hot-update.js", + "/chunks/email-verified.f4ad7341b0fef6bc0d60.hot-update.js": "/chunks/email-verified.f4ad7341b0fef6bc0d60.hot-update.js", + "/chunks/email-verified.fded8f5721cb552e83e3.hot-update.js": "/chunks/email-verified.fded8f5721cb552e83e3.hot-update.js", + "/chunks/email-verified.25160ce925957d249aae.hot-update.js": "/chunks/email-verified.25160ce925957d249aae.hot-update.js", + "/chunks/email-verified.ecab01fa10ed886eebc0.hot-update.js": "/chunks/email-verified.ecab01fa10ed886eebc0.hot-update.js", + "/chunks/email-verified.c2ead76b26b7addec319.hot-update.js": "/chunks/email-verified.c2ead76b26b7addec319.hot-update.js", + "/chunks/email-verified.86804eee465fbb67e5eb.hot-update.js": "/chunks/email-verified.86804eee465fbb67e5eb.hot-update.js", + "/chunks/email-verified.15f96fcf88ace5e1372b.hot-update.js": "/chunks/email-verified.15f96fcf88ace5e1372b.hot-update.js", + "/chunks/email-verified.7e23a87c05357703399a.hot-update.js": "/chunks/email-verified.7e23a87c05357703399a.hot-update.js", + "/chunks/email-verified.05e4f9d18227cd2bd6f5.hot-update.js": "/chunks/email-verified.05e4f9d18227cd2bd6f5.hot-update.js", + "/chunks/email-verified.7503140105f12f935102.hot-update.js": "/chunks/email-verified.7503140105f12f935102.hot-update.js", + "/chunks/email-verified.ee0534c5b8e0144d8a93.hot-update.js": "/chunks/email-verified.ee0534c5b8e0144d8a93.hot-update.js", + "/chunks/email-verified.5caedd64ce24ec3f49c5.hot-update.js": "/chunks/email-verified.5caedd64ce24ec3f49c5.hot-update.js", + "/chunks/email-verified.a5cdb5f2c4bffbdcfb36.hot-update.js": "/chunks/email-verified.a5cdb5f2c4bffbdcfb36.hot-update.js", + "/chunks/email-verified.2fee6b254f11e713b406.hot-update.js": "/chunks/email-verified.2fee6b254f11e713b406.hot-update.js", + "/chunks/email-verified.a295d3616db83cc3182c.hot-update.js": "/chunks/email-verified.a295d3616db83cc3182c.hot-update.js", + "/js/main.4605e84fbc1170bd3ec5.hot-update.js": "/js/main.4605e84fbc1170bd3ec5.hot-update.js", + "/chunks/email-verified.4605e84fbc1170bd3ec5.hot-update.js": "/chunks/email-verified.4605e84fbc1170bd3ec5.hot-update.js", + "/chunks/email-verified.8c2f48a95651ad7d86dd.hot-update.js": "/chunks/email-verified.8c2f48a95651ad7d86dd.hot-update.js", + "/chunks/email-verified.fed36bf94fb08c42773b.hot-update.js": "/chunks/email-verified.fed36bf94fb08c42773b.hot-update.js", + "/chunks/email-verified.4f6d4ae24a00d5ae4d07.hot-update.js": "/chunks/email-verified.4f6d4ae24a00d5ae4d07.hot-update.js", + "/chunks/email-verified.569405b97dea60ea1d27.hot-update.js": "/chunks/email-verified.569405b97dea60ea1d27.hot-update.js", + "/chunks/email-verified.707268de085dc362fb8a.hot-update.js": "/chunks/email-verified.707268de085dc362fb8a.hot-update.js", + "/chunks/email-verified.f2ee7ae5a4f32ff32432.hot-update.js": "/chunks/email-verified.f2ee7ae5a4f32ff32432.hot-update.js", + "/chunks/email-verified.829b30702249e29b9a13.hot-update.js": "/chunks/email-verified.829b30702249e29b9a13.hot-update.js", + "/chunks/email-verified.0251ae10b3a973945450.hot-update.js": "/chunks/email-verified.0251ae10b3a973945450.hot-update.js", + "/chunks/email-verified.6ffc313e2ebf17d91c5b.hot-update.js": "/chunks/email-verified.6ffc313e2ebf17d91c5b.hot-update.js", + "/js/main.47e67a30cfdcd8c9a9f7.hot-update.js": "/js/main.47e67a30cfdcd8c9a9f7.hot-update.js", + "/chunks/email-verified.47e67a30cfdcd8c9a9f7.hot-update.js": "/chunks/email-verified.47e67a30cfdcd8c9a9f7.hot-update.js", + "/js/main.2176e202ed63740976c9.hot-update.js": "/js/main.2176e202ed63740976c9.hot-update.js", + "/chunks/email-verified.2176e202ed63740976c9.hot-update.js": "/chunks/email-verified.2176e202ed63740976c9.hot-update.js", + "/chunks/sign-up.ed74b6c7ea20cfd15bbe.hot-update.js": "/chunks/sign-up.ed74b6c7ea20cfd15bbe.hot-update.js", + "/js/main.673b2e7bb4fa6c94a7bc.hot-update.js": "/js/main.673b2e7bb4fa6c94a7bc.hot-update.js", + "/chunks/email-verified.0825e54df39b2dde3b96.hot-update.js": "/chunks/email-verified.0825e54df39b2dde3b96.hot-update.js" } diff --git a/resources/js/router.js b/resources/js/router.js index 3edf4294..183e0bec 100644 --- a/resources/js/router.js +++ b/resources/js/router.js @@ -334,6 +334,15 @@ const routesShared = [ }, ] const routesAuth = [ + { + name: 'SuccessfullyVerified', + path: '/successfully-verified', + component: () => + import(/* webpackChunkName: "chunks/email-verified" */ './views/Auth/SuccessfullyEmailVerified'), + meta: { + requiresAuth: false + }, + }, { name: 'SignIn', path: '/sign-in', diff --git a/resources/js/views/Auth/SignUp.vue b/resources/js/views/Auth/SignUp.vue index 5cb5c0c6..33d7e24e 100644 --- a/resources/js/views/Auth/SignUp.vue +++ b/resources/js/views/Auth/SignUp.vue @@ -132,17 +132,23 @@ // Send request to get user token axios - .post('/register', this.register) + .post('/api/register', this.register) .then(() => { // End loading this.isLoading = false - // Set login state - this.$store.commit('SET_AUTHORIZED', true) - - // Go to files page - this.$router.push({name: 'Files'}) + if(! config.userVerification) { + // Set login state + this.$store.commit('SET_AUTHORIZED', true) + + // Go to files page + this.$router.push({name: 'Files'}) + } else { + // Go to sign-in page + this.$router.push({name: 'SignIn'}) + } + }) .catch(error => { diff --git a/resources/js/views/Auth/SuccessfullyEmailVerified.vue b/resources/js/views/Auth/SuccessfullyEmailVerified.vue new file mode 100644 index 00000000..72850e01 --- /dev/null +++ b/resources/js/views/Auth/SuccessfullyEmailVerified.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/routes/api.php b/routes/api.php index ff8f82d8..4bc88253 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,5 +1,6 @@ 'password'], function () { Route::post('/reset', [ResetPasswordController::class, 'reset']); }); +// Register user +Route::post('/register', [CreateNewUser::class, 'store']); + // User master Routes Route::group(['middleware' => ['auth:sanctum']], function () { // Browse diff --git a/tests/Feature/Accounts/AuthTest.php b/tests/Feature/Accounts/AuthTest.php index 32f4ec8b..1ee36623 100644 --- a/tests/Feature/Accounts/AuthTest.php +++ b/tests/Feature/Accounts/AuthTest.php @@ -65,7 +65,7 @@ class AuthTest extends TestCase ]); }); - $this->postJson('/register', [ + $this->postJson('api/register', [ 'email' => 'john@doe.com', 'password' => 'SecretPassword', 'password_confirmation' => 'SecretPassword', diff --git a/tests/Feature/Accounts/UserAccountTest.php b/tests/Feature/Accounts/UserAccountTest.php index 991a0b81..67f50797 100644 --- a/tests/Feature/Accounts/UserAccountTest.php +++ b/tests/Feature/Accounts/UserAccountTest.php @@ -279,7 +279,7 @@ class UserAccountTest extends TestCase $response = $this->getJson($verificationUrl); - $response->assertRedirect('sign-in'); + $response->assertRedirect('successfully-verified'); $this->assertNotNull(User::find($user->id)->get('email_verified_at')); }