2017-03-16 104 views
0

我是新來的網絡編程,我必須爲我的學校開發一個類似instagram的東西。我們在ReactJS中有前端,現在我們必須在nodeJS中開發一個服務器,使用日誌的passport和所有數據庫的dynamoDb(它將部署在亞馬遜服務上)。req.isAuthenticated()總是假,PassportJs + nodeJS + dynamoDb

我現在遇到了護照問題,當我打電話給req.isAuthenticated()時,它總是返回錯誤,我真的不知道爲什麼。 這裏是我的代碼: 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}); 
    } 
}); 
})); 

最後: 樣品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"); 
} 

謝謝爲你的幫助傢伙!

回答

0

因爲你不驗證,你不必爲你的數據庫連接的情況下,就爲當地戰略的一個片段使用護照dynamodb時here

+0

我已經連接到我的數據庫,在那裏我有一個表「用戶」與我所有的用戶信息。我是否也需要將我的會話儲存在數據庫中? – nicorivat