在nodejs中使用护照而无需重定向并在同一路线上显示消息

时间:2016-09-02 11:07:02

标签: javascript node.js passport.js passport-local

我正在使用nodejs创建restful api而不使用jwt只使用cookie进行身份验证。 以下是包含硬编码数据的示例代码:

            var express=require('express');
            var app=express();
            var bodyparser=require('body-parser');
            var passport=require('passport');
            var morgan=require('morgan');
            var cookieParser = require('cookie-parser');
            var session      = require('express-session');


            app.use(bodyparser.urlencoded({extended:false}));
            app.use(bodyparser.json());
            app.use(morgan('dev'));
            app.use(session({ secret: 'testing',resave: true,saveUninitialized: true }));
            app.use(passport.initialize());
            app.use(passport.session());


            var LocalStrategy = require('passport-local').Strategy;
            passport.use(new LocalStrategy(function(username,password,done){

              if(username=="admin" && password=="admin"){
                       return done(null,{id:203,name:'admin',email:'admin@admin.com'});
              }  
              else{
                return done(null,false,{"message": "Invalid Username / Password"});
              }

            }));

            passport.serializeUser(function (user, done) {
                done(null,203);
            });
            passport.deserializeUser(function (id, done) {
                done(null,{id:203,name:'admin',email:'admin@admin.com'} );
            });

            function isLoggedIn(req, res, next) {
                if (req.isAuthenticated())
                    return next();

                res.sendStatus(401);
            }


            app.get('/',function(req,res){
             res.send({'status':'in Index'});
            });

            app.get('/login',
                passport.authenticate('local',{successRedirect:'/dashboard',failureRedirect:'/loginfailed'}),
                function(req,res){
                console.log('In Login');    
                res.send(req.session);
            });

            app.get('/loginfailed',function(req,res){

             res.send({'status':'login failed'});
            });

            app.get('/dashboard',isLoggedIn,function(req,res){
            console.log(req.user.id);   
            console.log(req.session.passport);
             res.send({'status':'login Success'});
            });

            app.get('/logout',function(req,res){
                req.logOut();
                req.session.destroy(function (err) {
                    res.clearCookie('connect.sid');
                    res.redirect('/'); 
                });

            });


            app.listen(5000);

Everthing工作正常,但我不想在成功登录时将用户重定向到不同的路由,或者在失败时只显示同一路由上的任何消息。 可能吗 ?如果可能的话,正确的做法是什么? 任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

不要指定重定向路线:

app.get('/login',
  passport.authenticate('local',{}),
  function(req,res){
    console.log('In Login');    
    res.send(req.session);
  });