代码之家  ›  专栏  ›  技术社区  ›  james joel

护照js在没有mongoose的情况下无法工作

  •  1
  • james joel  · 技术社区  · 6 年前

    我的应用程序。js是

    var express = require('express');
    var app = express();
    var bodyParser = require('body-parser');
    var cookieParser = require('cookie-parser');
    var flash = require('connect-flash');
    var session = require('express-session');
    var passport = require('passport');
    
    
    app.set('views', __dirname+'/views');
    app.set('view engine', 'ejs');
    
    app.use(bodyParser());
    app.use(cookieParser());
    app.use(session({secret : 'somthing'}));
    app.use(flash());
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(function(req, res, next){
        res.locals.message = req.flash();
        console.log(res.locals);
        next();
    });
    app.use(require('./controller/router'));
    
    // Default Controller Come Here
    app.listen(3000, function(){
        console.log('Running');
    })
    

    路由器。js是

    var express = require('express');
    var router = express.Router();
    
    router.use('/', require('./home'));
    router.use('/login', require('./login'));
    router.use('/user', require('./user'));
    
    module.exports=router;
    

    护照js(配置文件夹内)

    var passport = require('passport');
    var LocalStrategy = require('passport-local').Strategy;
    
    var User = require('../model/users');
    
    
    passport.serializeUser(function(user, done) {
      done(null, user.id);
    });
    
    passport.deserializeUser(function(id, done) {
        done(err, id);
    });
    
    
    passport.use(new LocalStrategy(function(username, password, done){
            if(username == "test@test.com") 
            /* hardcore check username and password */
            {
                if(password=="123")
                {
                    var result = { id : 1, fullname : "james", username : "jamesjoel"};
                    console.log("Success");
                    return done(result, true);
                }
                return done(null, false, { message : "Incorrect Passwordtttt"});
            }
            return done(null, false, { message : "Incorrect Username and password"});
    
        }
    
    ));
    module.exports=passport;
    

    最后是我的登录。js控制器为

    var passport = require('../config/passport');
    var express = require('express');
    var router = express.Router();
    
    
        router.post('/',  passport.authenticate('local', { 
                successRedirect: '/user',
            failureRedirect: '/login',
            failureFlash: true 
          })
        );
    
    
        router.get('/', function(req, res){
            console.log(req.flash());
            res.render('login', { msg : req.flash()});
        });
    
        module.exports=router;
    

    但当我发送正确的用户名和密码时,它会在控制台中显示“success”,并显示[Object Object]和successRedirect不起作用,实际上我写了一些东西。serializeUser()和。反序列化用户()它也不会显示在控制台上。。。。 所以请帮我做这个。。。。。

    1 回复  |  直到 6 年前
        1
  •  0
  •   abdulbarik    6 年前

    done 是回调,它将第一个参数作为错误。但在您的情况下,在成功之后,您仍然将值作为错误传递,请尝试将其设置为null,如下所示 return done(null,result, true)

    if(password=="123"){
        var result = { id : 1, fullname : "james", username : "jamesjoel"};
        console.log("Success");
        return done(null,result, true);
     }