Skip to content
Snippets Groups Projects
Commit 690f7ee8 authored by Kagamino's avatar Kagamino
Browse files

authentication ready

parent 03a4c23d
No related branches found
No related tags found
2 merge requests!2Release 0.2: Notifications & Errors,!1Release 0.1: Authentication & Session
index.js 0 → 100644
const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const User = require('./models/user');
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const config = require('./config.json');
// Configuration
const app = express();
app.set('view engine', 'pug');
app.use(session({
secret: config.secret,
resave: false,
saveUninitialized: false
}));
// Middlewares
app.use(bodyParser.urlencoded({
extended: false,
}));
app.use((req, res, next) => {
if (!req.session.user && !['/', '/signup'].includes(req.url)) {
return res.redirect('/signup');
} else {
return next();
}
});
app.get('/', (req, res) => {
return res.render('home');
});
app.get('/signup', (req, res) => {
return res.render('signup');
});
app.post('/signup', (req, res) => {
bcrypt.hash(req.body.password, config.cryptRounds).then((hash, err) => {
User.create(req.body).then(user => {
req.session.user = user;
return res.redirect('/');
});
});
});
app.post('/login', (req, res) => {
User.findOne({ username: req.body.username }).then(user => {
bcrypt.compare(req.body.password, user.passwordHash).then((err, same) => {
if (same) {
req.session.user = user;
return res.redirect(req.query.nextUrl);
} else {
return res.redirect('/signup');
}
});
});
});
mongoose.connect('mongodb://localhost/rolegame', err => {
console.log('Server connected to Mongo database');
app.listen(config.port, () => {
console.log(`Server listening on http://localhost:${config.port}`);
});
});
const mongoose = require('mongoose');
const User = new mongoose.Schema({
firstName: {
type: String,
required: true,
},
lastName: {
type: String,
},
username: {
unique: true,
type: String,
lowercase: true
},
email: {
type: String,
required: true,
},
passwordHash: {
type: String,
},
});
module.exports = mongoose.model('User', User);
\ No newline at end of file
<!DOCTYPE html>
html(lang="en")
head
meta(charset="UTF-8")
meta(name="viewport", content="width=device-width, initial-scale=1.0")
meta(http-equiv="X-UA-Compatible", content="ie=edge")
link(rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css" integrity="sha256-9mbkOfVho3ZPXfM7W8sV2SndrGDuh7wuyLjtsWeTI1Q=" crossorigin="anonymous")
title RoleGame
body
block navbar
.ui.container
block main
block script
script(src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha256-3edrmyuQ0w65f8gfBsqowzjJe2iM6n0nKciPUp8y+7E=" crossorigin="anonymous")
script(src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.js" integrity="sha256-t8GepnyPmw9t+foMh3mKNvcorqNHamSKtKRxxpUEgFI=" crossorigin="anonymous")
\ No newline at end of file
extends base.pug
block main
h1.ui.header Bienvenue sur RoleGame
extends base.pug
block main
form.ui.form(action="/signup" method="post")
.two.fields
.field
label(for="firstName") Prénom
input#firstName(type="text", name="firstName")
.field
label(for="lastName") Nom de famille
input#lastName(type="text", name="lastName")
.field
label(for="email") Email
input#email(type="email", name="email")
.field
label(for="username") Nom d'utilisateur
input#username(type="text", name="username")
.field
label(for="password") Mot de passe
input#password(type="password", name="password")
.field
input.ui.button(type="submit", value="S'inscrire")
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment