const express = require(
'express'
);
const pass = require(
'passport'
);
const localAuth = require(
'passport-local'
).Strategy;
const sess = require(
'express-session'
);
const app = express();
pass.use(
new
localAuth(
(username, password, done) => {
if
(username ===
'admin'
&& password ===
'gfg'
) {
return
done(
null
, { id: 1, username:
'user'
});
}
else
{
return
done(
null
,
false
,
{ message:
'Hey Geek! Incorrect username or password.'
});
}
}
));
pass.serializeUser((user, done) => {
done(
null
, user.id);
});
pass.deserializeUser((id, done) => {
const user = { id: 1, username:
'user'
};
done(
null
, user);
});
app.use(express.urlencoded({ extended:
true
}));
app.use(sess(
{
secret:
'gfg'
,
resave:
false
,
saveUninitialized:
false
}));
app.use(pass.initialize());
app.use(pass.session());
app.get(
'/'
, (req, res) => {
res.send(
'<h1>Passport.js Authentication Example</h1>'
);
});
app.get(
'/login'
, (req, res) => {
res.send(
'<h1>Login Page</h1><form action="/login" method="post">'
+
'Username: <input type="text" name="username"><br>'
+
'Password: <input type="password" name="password"><br>'
+
'<input type="submit" value="Login"></form>'
);
});
app.post(
'/login'
,
pass.authenticate(
'local'
, {
successRedirect:
'/profile'
,
failureRedirect:
'/login'
,
failureFlash:
true
})
);
app.get(
'/profile'
, isAuthenticated, (req, res) => {
res.send(
`<h1>Welcome ${req.user.username}!
</h1><a href=
"/logout"
>Logout</a>`
);
});
app.get(
'/logout'
, (req, res) => {
req.logout((err) => {
if
(err) {
return
next(err);
}
res.redirect(
'/'
);
});
});
function
isAuthenticated(req, res, next) {
if
(req.isAuthenticated()) {
return
next();
}
res.redirect(
'/login'
);
}
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on
http:
);
});