2017-03-16 11 views
0

私はWebプログラミングには新しく、私の学校のようなinstagramのようなものを開発しなければなりません。私たちはReactJSのフロントエンドを持っています。そして今、私たちは、ログ用のパスポートとすべてのデータベース用のDynamoDbを使用してnodeJS内のサーバーを開発しなければなりません(これはamazonサービス上に配備されます)。req.isAuthenticated()常にfalse、PassportJs + nodeJS + dynamoDb

私は今Passportで問題が発生しています。私はreq.isAuthenticated()を呼び出すと常にfalseを返します。本当になぜそうはしません。 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

でパスポートを使用している場合、ローカルの戦略のためのスニペットがあり、私はすでに私の私のデータベースに接続してよ私のすべてのユーザーの情報が入ったテーブル "Users"があります。セッションをデータベースに保存する必要がありますか? – nicorivat

関連する問題