简体   繁体   中英

req.isAuthenticated() always false, PassportJs + nodeJS + dynamoDb

I'm new to web programming and I have to develop an instagram-like for my school. We have the frontend in ReactJS and now we have to develop a server in nodeJS, using passport for logs and dynamoDb for all the databases (it will be deployed on amazon services).

I'm having an issue right now with Passport, it always returns false when i'm calling req.isAuthenticated() , and I really don't why. Here is my code: Index.js

const express       = require('express');
const session       = require('express-session');
const cookieParser  = require('cookie-parser');
const flash         = require('connect-flash');
const passport      = require('passport');
...
const app = express();
...
app.use(cookieParser());

require('./common/passport')(passport);

app.use(session({
    cookie : {
    maxAge: 3600000, // see below
    secure: false
},
secret: 'khugugjh',
resave: true,
saveUninitialized: true
})); // session secret

app.use(passport.initialize());
app.use(passport.session()); // persistent login      
...
require('./controllers/sample-controller')(app, passport);
const port = process.env.PORT || 3000;
app.listen(port);

passport.js

...
passport.serializeUser(function(user, done) {
    done(null, user.email);
});

// used to deserialize the user
passport.deserializeUser(function(email, done) {
  docClient.getItem({"TableName":tableName,"Key": {"email":{"S":email}}}, function(err,data){
if (err)
    done(err,data);
else
    done(err,data.Item)
 })
});

...

passport.use('local-login', new LocalStrategy({
    usernameField : 'email',
    passwordField : 'password',
    passReqToCallback : true
},
function(req, email, password, done) { 
email = req.body.email;
password = req.body.password;
var params = {
        TableName: tableName,
        Key:{
            "email": email
        }
    };
    docClient.get(params, function(err,data){
    if (err){
        return done(err);
    }
    if (isEmpty(data)){
        return done(null, false, "KO"); // req.flash is the way to set flashdata using connect-flash
    }
    if (password != data.Item.password){
        return done(null, false, "KO"); // create the loginMessage and save it to session as flashdata
    }else{
        return done(null, {email: data.Item.email});
    }
});
}));

and finally: sample-controller.js

...  
app.post('/login', passport.authenticate('local-login'), (req, res) => {

    res.send("OK");
});
...
   app.get('/profile', isLoggedIn, (req, res) => {

    console.log("AUTHENTIFIE !");
});

function isLoggedIn(req, res, next) {

    console.log(req.sessionStore.sessions);
    if (req.isAuthenticated())
        return next();
    console.log("UNAUTHORIZED");
}

Thanks for your help guys !

因为您没有经过身份验证,所以您没有数据库的连接实例, 在此处使用带有dynamodb的护照时,本地策略有一个摘要

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM