From 3b6c48a776cbabf87cb894c1de8b92942dc11def Mon Sep 17 00:00:00 2001 From: Rafi Date: Thu, 2 Mar 2023 23:10:56 +0800 Subject: [PATCH 1/3] account --- nuxt.config.ts | 3 +- pages/account/onboarding.vue | 66 +++++++++++++++ pages/account/signin.vue | 98 ++++++++++++++++++++++ pages/account/signup.vue | 158 +++++++++++++++++++++++++++++++++++ plugins/auth.js | 18 ++-- 5 files changed, 334 insertions(+), 9 deletions(-) create mode 100644 pages/account/onboarding.vue create mode 100644 pages/account/signin.vue create mode 100644 pages/account/signup.vue diff --git a/nuxt.config.ts b/nuxt.config.ts index a7ca469..05a8ca8 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -53,7 +53,8 @@ export default defineNuxtConfig({ devProxy: { "/api": { target: "http://localhost:8000/api", - prependPath: true + prependPath: true, + changeOrigin: true } } diff --git a/pages/account/onboarding.vue b/pages/account/onboarding.vue new file mode 100644 index 0000000..687faba --- /dev/null +++ b/pages/account/onboarding.vue @@ -0,0 +1,66 @@ + + + + + \ No newline at end of file diff --git a/pages/account/signin.vue b/pages/account/signin.vue new file mode 100644 index 0000000..fd78573 --- /dev/null +++ b/pages/account/signin.vue @@ -0,0 +1,98 @@ + + + \ No newline at end of file diff --git a/pages/account/signup.vue b/pages/account/signup.vue new file mode 100644 index 0000000..5001885 --- /dev/null +++ b/pages/account/signup.vue @@ -0,0 +1,158 @@ + + + \ No newline at end of file diff --git a/plugins/auth.js b/plugins/auth.js index 0761434..afb227f 100644 --- a/plugins/auth.js +++ b/plugins/auth.js @@ -1,7 +1,7 @@ const AUTH_ROUTE = { home: '/', - login: '/login' + login: '/account/signin', } const COOKIE_OPTIONS = { @@ -13,13 +13,13 @@ const COOKIE_OPTIONS = { const ENDPOINTS = { login: { - url: '/api/auth/signin' + url: '/api/account/login/' }, refresh: { url: '/api/auth/token/refresh' }, user: { - url: '/api/auth/session' + url: '/api/account/user/' } } @@ -68,7 +68,9 @@ export default defineNuxtPlugin(() => { } async fetchUser () { - const { data, error } = await useAuthFetch(ENDPOINTS.user.url) + const { data, error } = await useFetch(ENDPOINTS.user.url, { + // withCredentials: true + }) if (!error.value) { this.user = data.value this.loginIn.value = true @@ -117,10 +119,10 @@ export default defineNuxtPlugin(() => { addRouteMiddleware('auth', async (to, from) => { if (!auth.loginIn.value) { - const token = await auth.retrieveToken() - if (!token) { - return await auth.redirectToLogin() - } + // const token = await auth.retrieveToken() + // if (!token) { + // return await auth.redirectToLogin() + // } const error = await auth.fetchUser() if (error) { return await auth.redirectToLogin() From ef6657187a1104a210202ee4d7a40dce53033ebf Mon Sep 17 00:00:00 2001 From: Rafi Date: Fri, 3 Mar 2023 00:10:50 +0800 Subject: [PATCH 2/3] account --- nuxt.config.ts | 2 +- pages/account/signin.vue | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/nuxt.config.ts b/nuxt.config.ts index 05a8ca8..9e747d1 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -54,7 +54,7 @@ export default defineNuxtConfig({ "/api": { target: "http://localhost:8000/api", prependPath: true, - changeOrigin: true + changeOrigin: true, } } diff --git a/pages/account/signin.vue b/pages/account/signin.vue index fd78573..b96b579 100644 --- a/pages/account/signin.vue +++ b/pages/account/signin.vue @@ -78,7 +78,6 @@ const submit = async () => { submitting.value = true const { data, error } = await useFetch('/api/account/login/', { method: 'POST', - credentials: 'omit', body: JSON.stringify(formData.value) }) if (error.value) { From f166581a73c85204d3da2aeecbf4ca95c69429a1 Mon Sep 17 00:00:00 2001 From: Rafi Date: Fri, 3 Mar 2023 18:50:02 +0800 Subject: [PATCH 3/3] email verification --- composables/useAuthFetch.js | 12 ---- docker-compose.yml | 6 ++ pages/account/onboarding.vue | 27 +++++++-- pages/account/signin.vue | 29 +++++++--- pages/account/signup.vue | 30 +++++++--- pages/account/verify-email.vue | 100 +++++++++++++++++++++++++++++++++ pages/index.vue | 4 +- pages/login.vue | 87 ---------------------------- plugins/auth.js | 89 ++++------------------------- utils/helper.js | 4 +- 10 files changed, 185 insertions(+), 203 deletions(-) create mode 100644 pages/account/verify-email.vue delete mode 100644 pages/login.vue diff --git a/composables/useAuthFetch.js b/composables/useAuthFetch.js index 9e95d4a..72e7d40 100644 --- a/composables/useAuthFetch.js +++ b/composables/useAuthFetch.js @@ -1,18 +1,6 @@ export const useAuthFetch = async (url, options = {}) => { const { $auth } = useNuxtApp() - const token = await $auth.retrieveToken() - - if (!token) { - return await $auth.redirectToLogin() - } - - options = Object.assign(options, { - headers: { - 'Authorization': 'Bearer ' + token - } - }) - const res = await useFetch(url, options) if (res.error.value && res.error.value.status === 401) { await $auth.logout() diff --git a/docker-compose.yml b/docker-compose.yml index 8083a24..15320e3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,12 @@ services: - DJANGO_SUPERUSER_USERNAME=admin # default superuser name - DJANGO_SUPERUSER_PASSWORD=password # default superuser password - DJANGO_SUPERUSER_EMAIL=admin@example.com # default superuser email + # If you want to use the email verification function, you need to configure the following parameters +# - EMAIL_HOST=SMTP server address +# - EMAIL_PORT=SMTP server port +# - EMAIL_HOST_USER= +# - EMAIL_HOST_PASSWORD= +# - EMAIL_USE_TLS=True ports: - '8000:8000' networks: diff --git a/pages/account/onboarding.vue b/pages/account/onboarding.vue index 687faba..cf34e02 100644 --- a/pages/account/onboarding.vue +++ b/pages/account/onboarding.vue @@ -3,18 +3,29 @@ definePageMeta({ layout: 'vuetify-app', middleware: ['auth'] }) -const email = ref('') +const route = useRoute() const sending = ref(false) +const resent = ref(false) +const errorMsg = ref(null) const resendEmail = async () => { + errorMsg.value = null sending.value = true - const { data, error } = await useFetch('/api/account/resend-verification-email/', { - method: 'POST' + const { data, error } = await useFetch('/api/account/registration/resend-email/', { + method: 'POST', }) if (error.value) { - console.log(error.value) + errorMsg.value = 'Something went wrong. Please try again later.' + } else { + resent.value = true } sending.value = false } + +onNuxtReady(() => { + if (route.query.resend) { + resendEmail() + } +})