Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
Commit 4cd1adc5 authored by Martin Déclert's avatar Martin Déclert :cd:
Browse files

Gestion de la connexion utilisateur

parent efdfdcff
No related branches found
No related tags found
No related merge requests found
FROM mongo:bionic
RUN rm -f /etc/localtime \
&& ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime
RUN apt update && apt upgrade -y
RUN apt install -y vim git curl wget tar
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt install -y nodejs
WORKDIR /var/www/boilerplate
RUN npm install -g nodemon
......@@ -8,17 +8,21 @@ Imports
/*
Controller methods
*/
const register = req => {
const register = (req, res) => {
return new Promise( async (resolve, reject) => {
// Encrypt yser password
req.body.password = await bcrypt.hash( req.body.password, 10 );
// TODO: encrypt RGPD data
const exists = await Models.user.exists({ email: req.body.email })
if (!exists) {
// TODO: encrypt RGPD data
req.body.password = await bcrypt.hash(req.body.password, 10);
const user = await Models.user.create(req.body)
const jwt = user.generateJwt(user)
res.cookie( process.env.COOKIE_NAME, jwt, { maxAge: 700000, httpOnly: true } )
// Register new user
Models.user.create( req.body )
.then( data => resolve(data) )
.catch( err => reject(err) );
return resolve(user)
} else {
return reject(`Email ${req.body.email} already used`)
}
})
}
......
......@@ -46,7 +46,7 @@ Routes definition
const { ok, extra, miss } = checkFields( Mandatory.login, req.body );
// Error: bad fields provided
if( !ok ){ return renderErrorVue('index', '/Login', 'POST', res, 'Bad fields provided', { extra, miss }) }
if( !ok ){ return renderErrorVue('login', req, res, 'Bad fields provided', { extra, miss }) }
else{
Controllers.auth.login(req, res)
.then( apiResponse => renderSuccessVue( '/', req, res, 'User logged', apiResponse, true ) )
......@@ -55,6 +55,28 @@ Routes definition
}
})
// [BACKOFFICE] get data from client to log user and render index vue
this.router.post('/register', (req, res) => {
// Check body data
if( typeof req.body === 'undefined' || req.body === null || Object.keys(req.body).length === 0 ){
return renderErrorVue('index', req, res, 'No data provided', 'Request failed')
}
else{
// Check body data
const { ok, extra, miss } = checkFields( Mandatory.register, req.body );
// Error: bad fields provided
if( !ok ){ return renderErrorVue('login', req, res, 'Bad fields provided', { extra, miss }) }
else{
Controllers.auth.register(req, res)
.then( apiResponse => renderSuccessVue( '/', req, res, 'User logged', apiResponse, true ) )
.catch( apiError => renderErrorVue('login', req, res, apiError, 'Request failed') );
}
}
})
// [BACKOFFICE] get data from client to create object, protected by Passport MiddleWare
this.router.post('/:endpoint', this.passport.authenticate('jwt', { session: false, failureRedirect: '/' }), (req, res) => {
// Check body data
......
......@@ -64,6 +64,19 @@ Reset
/**/
/*
Login
*/
.form-tabs .selected {
text-decoration: underline;
}
.form-wrapper {
display: none;
}
/**/
/*
Commons
*/
......@@ -144,4 +157,8 @@ Global
font-weight: 900;
width: 100%;
}
.show {
display: initial;
}
/**/
\ No newline at end of file
......@@ -3,9 +3,37 @@
<main>
<section>
<%- include('components/form-login') -%>
<div class="form-tabs">
<a href="#" target="#login" class="selected">login</a>
<a href="#" target="#register">register</a>
</div>
<div class="form-wrapper show" id="login">
<%- include('components/form-login') -%>
</div>
<div class="form-wrapper" id="register">
<%- include('components/form-register') -%>
</div>
</section>
</main>
<!-- Importer le footer en EJS -->
<%- include('statics/footer') -%>
\ No newline at end of file
<%- include('statics/footer') -%>
<script>
document.addEventListener('DOMContentLoaded', () => {
const tabsBtns = document.querySelectorAll('.form-tabs a')
tabsBtns.forEach(btn => {
btn.addEventListener('click', event => {
event.preventDefault()
tabsBtns.forEach(btn => btn.classList.remove('selected'))
document.querySelectorAll('.form-wrapper').forEach(element => element.classList.remove('show'))
event.target.classList.add('selected')
document.querySelector(event.target.getAttribute('target')).classList.add('show')
})
})
})
</script>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment