Nullam vel sem. Nullam vel sem. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Donec vitae sapien ut libero venenatis faucibus. ullam dictum felis eu pede mollis pretium. Pellentesque ut neque.
-
-
-
-
- March 23, 2016
-
-
-
-
Event Title
-
Nullam vel sem. Nullam vel sem. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Donec vitae sapien ut libero venenatis faucibus. ullam dictum felis eu pede mollis pretium. Pellentesque ut neque.
-
-
-
-
-
-
-
April 2016
-
-
-
-
- April 02, 2016
-
-
-
-
Event Title
-
Nullam vel sem. Nullam vel sem. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Donec vitae sapien ut libero venenatis faucibus. ullam dictum felis eu pede mollis pretium. Pellentesque ut neque.
-
-
-
-
- April 28, 2016
-
-
-
-
Event Title
-
Nullam vel sem. Nullam vel sem. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Donec vitae sapien ut libero venenatis faucibus. ullam dictum felis eu pede mollis pretium. Pellentesque ut neque.
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/client/src/pages/spells/single-spell-page.vue b/client/src/pages/spells/single-spell-page.vue
index a6af9a5..dbaf519 100644
--- a/client/src/pages/spells/single-spell-page.vue
+++ b/client/src/pages/spells/single-spell-page.vue
@@ -1,13 +1,13 @@
-
-
Sortilège
-
+
+
Sortilège
+
\ No newline at end of file
diff --git a/client/src/pages/timelines/timeline-page.vue b/client/src/pages/timelines/timeline-page.vue
index f940b66..34a2f62 100644
--- a/client/src/pages/timelines/timeline-page.vue
+++ b/client/src/pages/timelines/timeline-page.vue
@@ -1,18 +1,12 @@
-
Nullam vel sem. Nullam vel sem. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Donec vitae sapien ut libero venenatis faucibus. ullam dictum felis eu pede mollis pretium. Pellentesque ut neque.
+
+
+
+
+ March 23, 2016
+
+
+
+
Event Title
+
Nullam vel sem. Nullam vel sem. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Donec vitae sapien ut libero venenatis faucibus. ullam dictum felis eu pede mollis pretium. Pellentesque ut neque.
+
+
+
+
+
+
+
April 2016
+
+
+
+
+ April 02, 2016
+
+
+
+
Event Title
+
Nullam vel sem. Nullam vel sem. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Donec vitae sapien ut libero venenatis faucibus. ullam dictum felis eu pede mollis pretium. Pellentesque ut neque.
+
+
+
+
+ April 28, 2016
+
+
+
+
Event Title
+
Nullam vel sem. Nullam vel sem. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Donec vitae sapien ut libero venenatis faucibus. ullam dictum felis eu pede mollis pretium. Pellentesque ut neque.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/client/src/store/index.js b/client/src/store/index.js
new file mode 100644
index 0000000..22d2bb0
--- /dev/null
+++ b/client/src/store/index.js
@@ -0,0 +1,19 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+
+import VueCookies from 'vue-cookies';
+Vue.use(VueCookies);
+Vue.$cookies.config('30d','','');
+
+Vue.use(Vuex);
+
+import user from './modules/user.store';
+
+const debug = process.env.NODE_ENV !== 'production';
+
+export default new Vuex.Store({
+ modules: {
+ user
+ },
+ strict: debug
+});
\ No newline at end of file
diff --git a/client/src/store/modules/spell.store.js b/client/src/store/modules/spell.store.js
new file mode 100644
index 0000000..0547e28
--- /dev/null
+++ b/client/src/store/modules/spell.store.js
@@ -0,0 +1,23 @@
+const state = {
+
+}
+
+const getters = {
+
+}
+
+const actions = {
+
+}
+
+const mutations = {
+
+}
+
+export default {
+ namespaced: true,
+ state,
+ getters,
+ actions,
+ mutations,
+}
\ No newline at end of file
diff --git a/client/src/store/modules/user.store.js b/client/src/store/modules/user.store.js
new file mode 100644
index 0000000..80f1e8e
--- /dev/null
+++ b/client/src/store/modules/user.store.js
@@ -0,0 +1,59 @@
+// API
+import { RepositoryFactory } from "~/api/repositories"
+const Users = RepositoryFactory.get('users')
+
+export const namespaced = true
+
+const state = {
+ status: {
+ logged: false,
+ user_token: null,
+ }
+};
+
+const getters = {
+ getUserToken: state => {
+ if (state.status.logged) {
+ return state.status.user_token
+ } else {
+ return false
+ }
+ }
+};
+
+const mutations = {
+ loginUser(state, user_token) {
+ state.status.user_token = user_token;
+ state.status.logged = true;
+ },
+ logoutUser(state) {
+ state.status.user_token = null;
+ state.status.logged = false;
+ }
+};
+
+const actions = {
+ user_login ({ commit }, data) {
+ return new Promise((resolve, reject) => {
+ Users.login(data)
+ .then(v => {
+ let user_token = v.data.token;
+ commit('loginUser', user_token);
+ resolve(user_token);
+ })
+ .catch(() => {
+ reject();
+ });
+ })
+ },
+ user_logout ({ commit }) {
+ commit('logoutUser');
+ }
+};
+
+export default {
+ state,
+ getters,
+ actions,
+ mutations,
+};
From fa945e45c95ede1826d00ffb9d90468dbb7b9fab Mon Sep 17 00:00:00 2001
From: Alexis <35.alexis.pele@gmail.com>
Date: Fri, 18 Dec 2020 20:34:47 +0100
Subject: [PATCH 3/7] - Fixed my revert hahaha :)
---
api/repositories/user-repository.js | 11 +-
.../src/components/global/navbar/navbar.vue | 99 ++++++------
client/src/main.js | 35 +----
client/src/pages/user/login-page.vue | 141 +++++++++---------
client/src/pages/user/profile-page.vue | 24 +--
client/src/routes.js | 140 ++++++++---------
6 files changed, 215 insertions(+), 235 deletions(-)
diff --git a/api/repositories/user-repository.js b/api/repositories/user-repository.js
index 88c7046..631b8c7 100644
--- a/api/repositories/user-repository.js
+++ b/api/repositories/user-repository.js
@@ -116,7 +116,8 @@ class UserRepository {
.then(newUser => {
resolve({
"message": "Account successfully created !",
- "user": newUser,
+ "code": 201,
+ "token": newUser.uuid,
})
})
.catch(err => {
@@ -146,11 +147,13 @@ class UserRepository {
if (match) {
resolve({
"message": "User successfully logged in !",
- "user": fetchedUser,
+ "code": 200,
+ "token": fetchedUser.uuid,
})
} else {
reject({
- "message": "Les informations de connexion sont erronées.",
+ "message": "Authentification attempt failed ; credentials are incorrect.",
+ "code": 400,
})
}
})
@@ -166,7 +169,7 @@ class UserRepository {
this.getOneByEmail(mail, false)
.then(() => {
reject({
- "message": "L'email est déjà utilisé par un autre utilisateur.",
+ "message": "This email is already linked to an account.",
"code": 403
})
})
diff --git a/client/src/components/global/navbar/navbar.vue b/client/src/components/global/navbar/navbar.vue
index aac51ae..8ae82e0 100644
--- a/client/src/components/global/navbar/navbar.vue
+++ b/client/src/components/global/navbar/navbar.vue
@@ -1,60 +1,61 @@
-
+
diff --git a/client/src/main.js b/client/src/main.js
index d92181e..eeadef3 100644
--- a/client/src/main.js
+++ b/client/src/main.js
@@ -1,9 +1,10 @@
// Core
import Vue from 'vue'
-import Vuex from 'vuex'
import VueRouter from 'vue-router'
import App from './app.vue'
+import store from './store'
+
import Globals from './global-components.js'
Globals.forEach(component => {
Vue.component(component.name, component)
@@ -55,38 +56,6 @@ Vue.filter('truncate', filter)
import router from './routes'
Vue.use(VueRouter)
-// Store
-Vue.use(Vuex)
-let user = Vue.$cookies.get('U_')
-
-const store = new Vuex.Store({
- state: user ?
- { status: { loggedIn: true }, user }
- : { status: { loggedIn: false }, user: null },
- mutations: {
- loginSucceed (state, user) {
- state.status.loggedIn = true
- state.user = user
- },
- loginFail (state) {
- state.status.loggedIn = false
- state.user = null
- },
- logout(state) {
- state.status.loggedIn = false;
- state.user = null;
- },
- registerSucceed (state, user) {
- state.status.loggedIn = true
- state.user = user
- },
- registerFail (state) {
- state.status.loggedIn = false
- state.user = null
- },
- }
-})
-
// Mount Vue
const app = new Vue({
render: h => h(App),
diff --git a/client/src/pages/user/login-page.vue b/client/src/pages/user/login-page.vue
index 5317808..0399ded 100644
--- a/client/src/pages/user/login-page.vue
+++ b/client/src/pages/user/login-page.vue
@@ -1,92 +1,93 @@
-
-
-
-
Connexion
-
-
-
-
+
+
+
+
Connexion
+
+
+
+
\ No newline at end of file
diff --git a/client/src/pages/user/profile-page.vue b/client/src/pages/user/profile-page.vue
index 61d836c..1aa4071 100644
--- a/client/src/pages/user/profile-page.vue
+++ b/client/src/pages/user/profile-page.vue
@@ -1,24 +1,25 @@
-
@@ -32,7 +32,7 @@
placeholder="john.doe@gmail.com"
autocomplete="email">
Votre addresse mail nous servira principalement à vous identifier et à retrouver votre compte si vous oubliez vos informations de connexion.
- {{ errors.email }}
+ {{ errors.email }}
@@ -58,8 +58,8 @@
class="form-control"
autocomplete="password-verification">
Votre mot de passe doit idéalement contenir des symboles ainsi que des lettres et des chiffres.
- {{ errors.password }}
- {{ errors.password_check }}
+ {{ errors.password }}
+ {{ errors.password_check }}
diff --git a/client/src/routes.js b/client/src/routes.js
index 9c0a412..12668aa 100644
--- a/client/src/routes.js
+++ b/client/src/routes.js
@@ -1,5 +1,6 @@
import VueRouter from 'vue-router'
-import store from './store'
+
+// import store from './store'
// Pages
import Index from "~/pages/index-page"
@@ -79,23 +80,23 @@ const router = new VueRouter({
linkExactActiveClass: "active",
})
-router.beforeEach((to, from, next) => {
- if (to.matched.some(record => record.meta.loginFilter)) {
- if (store.getters.getUserToken) {
- next({
- path: '/',
- });
- }
- next();
- } else if (to.matched.some(record => record.meta.logoutFilter)) {
- if (!store.getters.getUserToken) {
- next({
- path: '/connexion',
- });
- }
- next();
- }
- next();
-})
+// router.beforeEach((to, from, next) => {
+// if (to.matched.some(record => record.meta.loginFilter)) {
+// if (store.getters.getUserProfile) {
+// next({
+// path: '/',
+// });
+// }
+// next();
+// } else if (to.matched.some(record => record.meta.logoutFilter)) {
+// if (!store.getters.getUserProfile) {
+// next({
+// path: '/connexion',
+// });
+// }
+// next();
+// }
+// next();
+// })
export default router;
\ No newline at end of file
diff --git a/client/src/store/modules/user.store.js b/client/src/store/modules/user.store.js
index 80f1e8e..c3a8824 100644
--- a/client/src/store/modules/user.store.js
+++ b/client/src/store/modules/user.store.js
@@ -1,20 +1,22 @@
-// API
-import { RepositoryFactory } from "~/api/repositories"
-const Users = RepositoryFactory.get('users')
+// import cookie from 'vue-cookies';
-export const namespaced = true
+// API
+import { RepositoryFactory } from "~/api/repositories";
+const Users = RepositoryFactory.get('users');
+
+export const namespaced = true;
const state = {
status: {
logged: false,
- user_token: null,
+ profile: null,
}
};
const getters = {
- getUserToken: state => {
+ getUserProfile: state => {
if (state.status.logged) {
- return state.status.user_token
+ return state.status.profile
} else {
return false
}
@@ -22,12 +24,12 @@ const getters = {
};
const mutations = {
- loginUser(state, user_token) {
- state.status.user_token = user_token;
+ loginUser(state, user) {
+ state.status.profile = user;
state.status.logged = true;
},
logoutUser(state) {
- state.status.user_token = null;
+ state.status.profile = null;
state.status.logged = false;
}
};
@@ -37,9 +39,10 @@ const actions = {
return new Promise((resolve, reject) => {
Users.login(data)
.then(v => {
- let user_token = v.data.token;
- commit('loginUser', user_token);
- resolve(user_token);
+ let user = v.data.user;
+ // cookie.set('user_token', user.uuid);
+ commit('loginUser', user);
+ resolve(user);
})
.catch(() => {
reject();
@@ -47,10 +50,16 @@ const actions = {
})
},
user_logout ({ commit }) {
+ // cookie.remove('user_token');
commit('logoutUser');
}
};
+// Check if a cookie with user token exists
+// if (cookie.get('user_token')) {
+// mutations.loginUser(state, cookie.get('user_token'));
+// }
+
export default {
state,
getters,
From 20f946a94500628201d366ece3f5de428f35e721 Mon Sep 17 00:00:00 2001
From: Alexis <35.alexis.pele@gmail.com>
Date: Sat, 19 Dec 2020 18:15:39 +0100
Subject: [PATCH 5/7] - Added email availability checker in API
---
api/repositories/user-repository.js | 24 +++++++++++++++++++++---
api/routes/users.js | 27 ++++++++++++++++++++++++++-
2 files changed, 47 insertions(+), 4 deletions(-)
diff --git a/api/repositories/user-repository.js b/api/repositories/user-repository.js
index 9aceec5..a8cbe55 100644
--- a/api/repositories/user-repository.js
+++ b/api/repositories/user-repository.js
@@ -166,18 +166,36 @@ class UserRepository {
// Check if one user already has that email
checkIfEmailAvailable(mail) {
return new Promise((resolve, reject) => {
+
+ if (!this.validateEmail(mail)) {
+ reject({
+ "message": "The request isn't a correctly formed email.",
+ "code": 400,
+ })
+ }
+
this.getOneByEmail(mail, false)
.then(() => {
- reject({
+ resolve({
"message": "This email is already linked to an account.",
- "code": 403
+ "available": false,
+ "code": 200
})
})
.catch(() => {
- resolve(true)
+ resolve({
+ "message": "This email is available.",
+ "available": true,
+ "code": 200
+ })
})
})
}
+
+ validateEmail(email) {
+ const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+ return re.test(String(email).toLowerCase());
+ }
}
module.exports = UserRepository
\ No newline at end of file
diff --git a/api/routes/users.js b/api/routes/users.js
index 6219953..ab41d03 100644
--- a/api/routes/users.js
+++ b/api/routes/users.js
@@ -38,7 +38,7 @@ router.get('/', async (req, res) => {
})
-// GET ONE FORM UUID ------------------
+// GET ONE FROM UUID ------------------
const getUserByUUID = (uuid) => {
return Users.getOneByUUID(uuid)
.catch(err => {
@@ -63,6 +63,31 @@ router.get('/:uuid/', async (req, res) => {
})
+// CHECK IF MAIL IS AVAILABLE ------------------
+const checkIfEmailAvailable = (mail) => {
+ return Users.checkIfEmailAvailable(mail)
+ .catch(err => {
+ console.log(err)
+ throw err
+ })
+}
+router.get('/available/:mail/', async (req, res) => {
+ checkIfEmailAvailable(req.params.mail)
+ .then(v => {
+ res.setHeader('Content-Type', 'application/json;charset=utf-8')
+ res.end(JSON.stringify(v))
+ })
+ .catch(err => {
+ res.status(err.code).send(JSON.stringify(
+ {
+ "error": err.message,
+ "code": err.code
+ })
+ )
+ })
+})
+
+
// LOG A USER ------------------
const logUser = (mail, password) => {
return Users.logUser(mail, password)
From fdad47e84ec66f251da3a03657c385d849d38e4f Mon Sep 17 00:00:00 2001
From: Alexis <35.alexis.pele@gmail.com>
Date: Wed, 23 Dec 2020 18:10:02 +0100
Subject: [PATCH 6/7] - Fixed an error with 200 codes and translated API errors
---
api/repositories/user-repository.js | 32 ++++++++++++++---------------
1 file changed, 15 insertions(+), 17 deletions(-)
diff --git a/api/repositories/user-repository.js b/api/repositories/user-repository.js
index a8cbe55..bbdeb0f 100644
--- a/api/repositories/user-repository.js
+++ b/api/repositories/user-repository.js
@@ -31,7 +31,7 @@ class UserRepository {
})
.catch(() => {
reject({
- "message": "Database error, couldn't get all users.",
+ "message": "Erreur de base de données, les utilisateurs n'ont pas pu être récupérés.",
"code": 500
})
})
@@ -48,7 +48,7 @@ class UserRepository {
})
.catch(err => {
reject({
- "message": "User with this UUID was not found.",
+ "message": "L'utilisateur avec cet UUID n'a pas été trouvé.",
"code": 404
})
})
@@ -65,7 +65,7 @@ class UserRepository {
})
.catch(() => {
reject({
- "message": "User with this email was not found.",
+ "message": "L'utilisateur avec cet email n'a pas été trouvé.",
"code": 404
})
})
@@ -77,17 +77,17 @@ class UserRepository {
// Checks if body exists and if the model fits, and throws errors if it doesn't
if (isEmptyObject(u)) {
reject({
- "message": "Request body cannot be empty.",
+ "message": "Le corps de requête ne peut être vide.",
"code": 403
})
} else if (!v.validate(u, UserValidation).valid) {
reject({
- "message": "Schema is not valid - " + v.validate(u, UserValidation).errors,
+ "message": "Structure de la requête invalide - " + v.validate(u, UserValidation).errors,
"code": 403
})
} else if (isXSSAttempt(u.name) || isXSSAttempt(u.password) || isXSSAttempt(u.mail)) {
reject({
- "message": "Injection attempt detected, aborting the request.",
+ "message": "Essai d'injection détecté, avortement de la requête.",
"code": 403
})
} else {
@@ -115,14 +115,14 @@ class UserRepository {
})
.then(newUser => {
resolve({
- "message": "Account successfully created !",
+ "message": `Compte utilisateur #${newUser.id} créé avec succès.`,
"code": 201,
"user": newUser,
})
})
.catch(err => {
resolve({
- "message": "An error has occured while creating your account.",
+ "message": "Une erreur s'est produite en créant votre compte. Veuillez réessayer ultérieurement ou contactez l'administrateur.",
"code": 500,
})
})
@@ -146,13 +146,13 @@ class UserRepository {
if (match) {
resolve({
- "message": "User successfully logged in !",
+ "message": `L'utilisateur #${fetchedUser.id} s'est connecté.`,
"code": 200,
"user": fetchedUser,
})
} else {
reject({
- "message": "Authentification attempt failed ; credentials are incorrect.",
+ "message": "Les informations de connexions sont erronées.",
"code": 400,
})
}
@@ -169,23 +169,21 @@ class UserRepository {
if (!this.validateEmail(mail)) {
reject({
- "message": "The request isn't a correctly formed email.",
+ "message": "La requête n'est pas un email valide.",
"code": 400,
})
}
this.getOneByEmail(mail, false)
.then(() => {
- resolve({
- "message": "This email is already linked to an account.",
- "available": false,
- "code": 200
+ reject({
+ "message": "Cet email est déjà lié à un compte.",
+ "code": 409
})
})
.catch(() => {
resolve({
- "message": "This email is available.",
- "available": true,
+ "message": "Cet email est disponible.",
"code": 200
})
})
From 65abb41a9fd2570e7efb432a27662884ec4bdf1d Mon Sep 17 00:00:00 2001
From: Alexis <35.alexis.pele@gmail.com>
Date: Wed, 23 Dec 2020 20:25:43 +0100
Subject: [PATCH 7/7] - Implemented store for register methods
---
api/routes/users.js | 4 -
client/src/api/usersRepository.js | 3 +
client/src/pages/user/login-page.vue | 77 +++---
client/src/pages/user/register-page.vue | 318 ++++++++++++++----------
client/src/store/modules/user.store.js | 24 +-
client/vue.config.js | 30 +--
6 files changed, 264 insertions(+), 192 deletions(-)
diff --git a/api/routes/users.js b/api/routes/users.js
index ab41d03..8e0ac19 100644
--- a/api/routes/users.js
+++ b/api/routes/users.js
@@ -17,7 +17,6 @@ const Users = new UserRepository();
const getUsers = () => {
return Users.getAll()
.catch(err => {
- console.log(err)
throw err
})
}
@@ -42,7 +41,6 @@ router.get('/', async (req, res) => {
const getUserByUUID = (uuid) => {
return Users.getOneByUUID(uuid)
.catch(err => {
- console.log(err)
throw err
})
}
@@ -67,7 +65,6 @@ router.get('/:uuid/', async (req, res) => {
const checkIfEmailAvailable = (mail) => {
return Users.checkIfEmailAvailable(mail)
.catch(err => {
- console.log(err)
throw err
})
}
@@ -92,7 +89,6 @@ router.get('/available/:mail/', async (req, res) => {
const logUser = (mail, password) => {
return Users.logUser(mail, password)
.catch(err => {
- console.log(err)
throw err
})
}
diff --git a/client/src/api/usersRepository.js b/client/src/api/usersRepository.js
index dfa0283..a3a9708 100644
--- a/client/src/api/usersRepository.js
+++ b/client/src/api/usersRepository.js
@@ -6,6 +6,9 @@ export default {
getOneFromUUID(uuid) {
return api.get(`${resource}/${uuid}`,)
},
+ checkEmailAvailable(mail) {
+ return api.get(`${resource}/available/${mail}`)
+ },
login(data) {
return api.post(`${resource}/login`, data)
},
diff --git a/client/src/pages/user/login-page.vue b/client/src/pages/user/login-page.vue
index cf8e2a9..ec406c1 100644
--- a/client/src/pages/user/login-page.vue
+++ b/client/src/pages/user/login-page.vue
@@ -14,22 +14,22 @@
id="email"
class="form-control"
:class="{
- 'is-invalid': errors.mailEmpty || errors.login,
- 'is-valid': submitted && !errors.mailEmpty }"
+ 'is-invalid': errors.email || errors.login,
+ 'is-valid': submitted && !errors.email }"
placeholder="john.doe@gmail.com"
autocomplete="email">
Votre addresse mail nous servira principalement à vous identifier et à retrouver votre compte si vous oubliez vos informations de connexion.
- Veuillez renseigner une adresse mail.
+ {{ errors.email }}
@@ -40,21 +40,19 @@
type="password"
id="password"
class="form-control"
- :class="{
- 'is-invalid': errors.passwordEmpty || errors.login,
- 'is-valid': submitted && !errors.passwordEmpty }"
+ :class="{ 'is-invalid': errors.password || errors.login }"
autocomplete="current-password">
Nous vous conseillons d'utiliser un mot de passe unique pour cette application seulement.
- Veuillez renseigner un mot de passe.
+ {{ errors.password }}
@@ -98,50 +96,55 @@ export default {
submitted: false,
errors: {
- mailEmpty: "",
- passwordEmpty: "",
+ email: "",
+ password: "",
login: "",
}
}
},
methods: {
async logUser(e) {
+ e.preventDefault();
+ // Resets old errors if any
+ for (const o in this.errors) {
+ this.errors[o] = ""
+ }
this.submitted = true;
- this.errors = this.resetErrors();
-
let userInput = {
"mail": this.email,
"password": this.password
};
- if (this.email && this.password) {
- this.$store.dispatch('user_login', userInput)
- .then(() => {
- this.$router.push('/profil');
- })
- .catch(() => {
- this.errors.login = "Erreur d'authentification. Les identifiants ne correspondent pas."
- });
- } else {
- if (!userInput.mail) {
- this.errors.mailEmpty = "Veuillez entrer une addresse mail valide."
- }
- if (!userInput.password) {
- this.errors.passwordEmpty = "Veuillez entrer un mot de passe."
+ if (!userInput.mail) {
+ this.errors.email = "Vous devez renseigner une addresse mail."
+ }
+ if (!userInput.password) {
+ this.errors.password = "Vous devez renseigner un mot de passe."
+ }
+
+ // Stops the method if any errors exist
+ for (const o in this.errors) {
+ if (this.errors[o] != "") {
+ this.submitted = false;
}
}
- e.preventDefault();
- },
- resetErrors() {
- return {
- mailEmpty: "",
- passwordEmpty: "",
- login: "",
+ if (this.submitted) {
+ this.$store.dispatch('user_login', userInput)
+ .then(() => {
+ this.$router.push('/profil')
+ })
+ .catch(err => {
+ if (err.status === 404) {
+ this.errors.email = err.data.error;
+ } else {
+ this.errors.login = "Une erreur inconnue est survenue, rééssayez plus tard.";
+ }
+ });
}
- }
+ },
}
}
diff --git a/client/src/pages/user/register-page.vue b/client/src/pages/user/register-page.vue
index db9a38d..e493d30 100644
--- a/client/src/pages/user/register-page.vue
+++ b/client/src/pages/user/register-page.vue
@@ -1,143 +1,193 @@
-