diff --git a/api/app/Http/Controllers/Auth/OAuthController.php b/api/app/Http/Controllers/Auth/OAuthController.php index 18ad9761..145b02cb 100644 --- a/api/app/Http/Controllers/Auth/OAuthController.php +++ b/api/app/Http/Controllers/Auth/OAuthController.php @@ -53,6 +53,7 @@ class OAuthController extends Controller "message" => "OAuth service failed to authenticate: " . $e->getMessage() ]); } + $user = $this->findOrCreateUser($provider, $driverUser); if (!$user) { @@ -116,6 +117,7 @@ class OAuthController extends Controller 'name' => $socialiteUser->getName(), 'email' => $email, 'email_verified_at' => now(), + 'utm_data' => json_decode(request()->utm_data, true) ]); // Create and sync workspace diff --git a/api/app/Http/Controllers/Auth/RegisterController.php b/api/app/Http/Controllers/Auth/RegisterController.php index 65b90543..81675f61 100644 --- a/api/app/Http/Controllers/Auth/RegisterController.php +++ b/api/app/Http/Controllers/Auth/RegisterController.php @@ -64,6 +64,7 @@ class RegisterController extends Controller 'agree_terms' => ['required', Rule::in([true])], 'appsumo_license' => ['nullable'], 'invite_token' => ['nullable', 'string'], + 'utm_data' => ['nullable', 'array'] ], [ 'agree_terms' => 'Please agree with the terms and conditions.', ]); @@ -82,6 +83,7 @@ class RegisterController extends Controller 'email' => strtolower($data['email']), 'password' => bcrypt($data['password']), 'hear_about_us' => $data['hear_about_us'], + 'utm_data' => array_key_exists('utm_data', $data) ? $data['utm_data'] : null, ]); // Add relation with user diff --git a/api/app/Models/User.php b/api/app/Models/User.php index 848a6f6b..3c5624cd 100644 --- a/api/app/Models/User.php +++ b/api/app/Models/User.php @@ -32,6 +32,7 @@ class User extends Authenticatable implements JWTSubject 'email', 'password', 'hear_about_us', + 'utm_data', ]; /** @@ -54,6 +55,7 @@ class User extends Authenticatable implements JWTSubject { return [ 'email_verified_at' => 'datetime', + 'utm_data' => 'array', ]; } diff --git a/api/database/migrations/2024_09_18_091846_add_utm_data_to_users_table.php b/api/database/migrations/2024_09_18_091846_add_utm_data_to_users_table.php new file mode 100644 index 00000000..54ea0280 --- /dev/null +++ b/api/database/migrations/2024_09_18_091846_add_utm_data_to_users_table.php @@ -0,0 +1,27 @@ +json('utm_data')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('utm_data'); + }); + } +}; diff --git a/client/components/pages/auth/components/RegisterForm.vue b/client/components/pages/auth/components/RegisterForm.vue index 988e029b..d927b762 100644 --- a/client/components/pages/auth/components/RegisterForm.vue +++ b/client/components/pages/auth/components/RegisterForm.vue @@ -140,12 +140,14 @@ export default { emits: ['afterQuickLogin', 'openLogin'], setup() { + const { $utm } = useNuxtApp() return { authStore: useAuthStore(), formsStore: useFormsStore(), workspaceStore: useWorkspacesStore(), providersStore: useOAuthProvidersStore(), logEvent: useAmplitude().logEvent, + $utm } }, @@ -157,6 +159,7 @@ export default { password_confirmation: "", agree_terms: false, appsumo_license: null, + utm_data: null }), disableEmail:false }), @@ -204,6 +207,7 @@ export default { methods: { async register() { let data + this.form.utm_data = this.$utm.value try { // Register the user. data = await this.form.post("/register") diff --git a/client/nuxt.config.ts b/client/nuxt.config.ts index 75c9544f..731cda80 100644 --- a/client/nuxt.config.ts +++ b/client/nuxt.config.ts @@ -14,6 +14,7 @@ export default defineNuxtConfig({ '@vueuse/motion/nuxt', 'nuxt-simple-sitemap', '@nuxt/ui', + 'nuxt-utm', ...process.env.NUXT_PUBLIC_GTM_CODE ? ['@zadigetvoltaire/nuxt-gtm'] : [], ], build: { diff --git a/client/package.json b/client/package.json index eaa995ab..d5ca746c 100644 --- a/client/package.json +++ b/client/package.json @@ -23,6 +23,7 @@ "nuxt": "^3.9.1", "nuxt-icon": "^0.6.10", "nuxt-simple-sitemap": "^4.2.3", + "nuxt-utm": "^0.1.10", "postcss": "^8.4.32", "prettier": "^3.2.5", "sass": "^1.69.6", diff --git a/client/pages/oauth/callback.vue b/client/pages/oauth/callback.vue index f1dd2aee..35f82638 100644 --- a/client/pages/oauth/callback.vue +++ b/client/pages/oauth/callback.vue @@ -30,6 +30,9 @@