Commit e928ae53 authored by ddeka0's avatar ddeka0

updated

parents
const express = require('express')
const bodyParser = require('body-parser')
const session = require('express-session')
const ONE_HOUR = 1000 * 60 * 60
const {
PORT = 3000,
NODE_ENV = 'development',
SESS_NAME = 'sid',
SESS_SECRET = 'kjkjs9u43jkjkl897sd',
SESS_LIFETIME = ONE_HOUR
} = process.env
const IN_PROD = NODE_ENV === 'production'
const app = express()
app.use(bodyParser.urlencoded({
extended: true
}))
const users = [
{id: 1,name: 'Alex', email: 'alex@gmail.com', password: '123'},
{id: 2,name: 'Max', email: 'max@gmail.com', password: '123'},
{id: 3,name: 'Tom', email: 'tom@gmail.com', password: '123'}
]
app.use(session({
name: SESS_NAME,
resave: false,
saveUninitialized: false,
secret: SESS_SECRET,
cookie: {
maxAge: SESS_LIFETIME,
sameSite: true,
secure: IN_PROD
}
}))
const redirectLogin = (req,res,next) => {
if(!req.session.userId) {
console.log('Redirected to login : [NO session]')
res.redirect('/login')
}else {
next()
}
}
const redirectHome = (req,res,next) => {
if(req.session.userId) {
console.log('Redirected to login : [session found]')
res.redirect('/home')
}else {
next()
}
}
app.use((req,res,next)=> {
const { userId } = req.session
if(userId) {
res.locals.user = users.find((user) => {
return user.id === req.session.userId
})
console.log('session found with session Id = ',userId)
console.log('This user found : ',res.locals.user)
}
next()
})
app.get('/',(req,res) => {
const {userId} = req.session
res.send(`
<h1>Welcome!<h1>
${userId ?`
<a href='/home'>Home</a>
<form method='post' action='/logout'>
<button>Logout</button>
</form>
`:`
<a href='/login'>Login</a>
<a href='/register'>Register</a>
`}
`)
})
app.get('/home',redirectLogin,(req,res) => {
const { user } = res.locals
res.send(`
<h1>Home</h1>
<a href='/'>Main</a>
<ul>
<li>Name: ${user.name}</li>
<li>Email: ${user.email}</li>
</ul>
`)
})
app.get('/login',redirectHome,(req,res) => {
res.send(`
<h1>Login</h1>
<form method='post' action='/login'>
<input type='email' name='email' placeholder='Email' required />
<input type='password' name='password' placeholder='Password' required />
<input type='submit' />
</form>
<a href='/register'>Register</a>
`)
})
app.get('/register',redirectHome,(req,res) => {
res.send(`
<h1>Register</h1>
<form method='post' action='/register'>
<input name='name' placeholder='name' required />
<input type='email' name='email' placeholder='Email' required />
<input type='password' name='email' placeholder='Email' required />
<input type='submit' />
</form>
<a href='/login'>Login</a>
`)
})
app.post('/login', redirectHome, (req,res) => {
const {email , password} = req.body
if(email && password) {
const user = users.find(user => user.email === email && user.password === password)
console.log(user)
if(user) {
req.session.userId = user.id
return res.redirect('/home')
}
}
console.log('Incorrect email and password!')
res.redirect('/login')
})
app.post('/register',redirectHome,(req,res) => {
const {name , email,password} = req.body
if(name && email && password) {
const exits = user.some((user)=> {
return user.email === email
})
if(!exits) {
id: users.length + 1
name,
email,
password
}
users.push(user)
res.session.userId = user.id
return res.redirect('/home')
}
console.log('Incorrect name , email and password!')
res.redirect('/register')
})
app.post('/logout',redirectLogin,(req,res) => {
req.session.destroy(err => {
if(err) {
return res.redirect('/home')
}
res.clearCookie(SESS_NAME)
res.redirect('/login')
})
})
app.listen(PORT,()=> {
console.log(`http://localhost:${PORT}`)
})
\ No newline at end of file
{
"name": "sessionTest",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "nodemon app"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.4",
"express-session": "^1.15.6"
},
"devDependencies": {
"nodemon": "^1.18.9",
"standard": "^12.0.1"
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment