Monday, 1 January 2018

How to use Passport LocalStrategy in Node.js?

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. 

No comments:

Post a Comment