簡體   English   中英

req.isAuthenticated()始終為false,PassportJs + nodeJS + dynamoDb

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

我是網絡編程的新手,必須為我的學校開發類似instagram的應用程序。 我們在ReactJS中擁有前端,現在我們必須在nodeJS中開發一個服務器,使用通行證存儲日志,並使用dynamoDb存儲所有數據庫(它將部署在Amazon服務上)。

我現在在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});
    }
});
}));

最后是: 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");
}

感謝您的幫助!

因為您沒有經過身份驗證,所以您沒有數據庫的連接實例, 在此處使用帶有dynamodb的護照時,本地策略有一個摘要

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM