To start working with Passport LocalStrategy we need to install these all packages.
Please install there all packages:-
ejs --
for creating view (view engine).
passport -- for using passport
middleware, initialize, session and
serialize and deserialize.
passport-local -- To use LocalStrategy.
express-session -- to create the session id(connect.sid)
in the browser cookies. Which confirms that the same logged in user is
accessing the application?
body-parser -- To send username and password from
the browser to the Passport LocalStrategry.
and of course express.
Once you have installed these all packages create a file index.js.
in that file paste it:-
var express=require('express');
var routers=require('./router');
var passport=require('passport');
var LocalStrategy=require('passport-local').Strategy;
var session=require('express-session');
const bodyParser = require('body-parser');
var app=express();
app.set('view engine','ejs');
app.use(session({
resave:false,
saveUninitialized:false,
secret:'Pandit'
}))
//require('./passport/local-stratgy');
passport.use(new LocalStrategy(function(username,passport,done){
//process.nextTick()
console.log('Local Strategy');
if(username=="shreya@gmail.com")
{
done(null,{user:username,email:'shreya@gmail.com'});
}
else
{
done(null,false);
}
}))
app.use(bodyParser.urlencoded({ extended: false }));
app.use(passport.initialize());
app.use(passport.session());
app.use('/',routers);
passport.serializeUser(function(user, done) {
console.log('Serialize');
console.log(user);
done(null, user);
});
passport.deserializeUser(function(user, done) {
console.log('De-Serialize');
console.log(user);
done(null, user);
});
app.listen(3000,()=>{
console.log('Listening at: 3000');
})
Create another file named router.js
In that paste it:--
var router=require('express').Router();
var passport=require('passport');
router.get('/',(req,res)=>{
res.render('login');
})
router.get('/user',(req,res)=>{
console.log(req.user);
res.send(JSON.stringify(req.user));
})
router.post('/login',passport.authenticate('local',{
successRedirect: '/loginSuccess',
failureRedirect: '/loginFailure'})
)
router.get('/loginFailure', function(req, res, next) {
res.send('Failed to authenticate');
}
);
router.get('/loginSuccess', function(req, res, next) {
res.send('Successfully authenticated');
}
);
module.exports=router;
Create a View folder and in that folder crate a file named login.ejs.
In that paste it:-
<html>
<body>
<form action="/login" method="post">
<div>
<label>Username:</label>
<input type="text" name="username" />
<br/>
</div>
<div>
<label>Password:</label>
<input type="password" name="password" />
</div>
<div>
<input type="submit" value="Submit" />
</div>
</form>
</body>
</html>
That's it.
You can change your credentials checking login in the LocalStrategy.