护照本地如何使用简单的json文件而不是数据库?

时间:2015-12-03 08:59:02

标签: node.js passport.js

passport.serializeUser()不使用任何数据库并将信息存储在简单passport.deserializeUser()时,需要对local-strategyjson file进行一些说明。

护照如何确定身份及其在deserializeUser()中的回复方式?

passport.use(
        'local-signup',
        new LocalStrategy(
        {
                usernameField: 'email',
                passwordField: 'password',
                passReqToCallback: true
            },
            function(request, email, password, done) {
                process.nextTick(
                    function() {
                        if(user.doesUserExist(email)) {
                            return done(
                                null,
                                false, 
                                request.flash('signupMessage', 'That email is already taken.')
                            );
                        }
                        else {
                          var newUser = user.createNewUser(email, password);
                            return done(null, {email: newUser.username, password: newUser.password});
                        }
                    }
                );
            }
        )
    );



// Used to serialize the user for the session
passport.serializeUser(
    function serializeUserCB(user, done) {
        done(null, user);
    }
);

// Used to deserialize the user
passport.deserializeUser(
    function deserializeUserCB(id, done) {
        done(null, id);
    }
);

1 个答案:

答案 0 :(得分:0)

Passport在会话中维护身份验证状态,因此您需要定义2个函数passport.serializeUserpassport.deSerializeUser,以便将用户实例序列化/反序列化到会话中。

每个后续请求都不包含凭据,而是包含标识会话以支持登录会话的唯一cookie。

对于序列化和反序列化,它使用来自

的密钥
app.use(session({
    secret: 'ThIsIsAsEcREtKEy',
    resave: true,
    saveUninitialized: true
}));

只需使用serializeUser和deserializeUser作为

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

用于本地Json文件。