password.deserializeUser()无法与Firebase一起使用

时间:2018-07-06 15:56:01

标签: javascript firebase firebase-realtime-database passport.js session-cookies

我无法使用passport.deserializeUser()方法搜索Firebase的用户。

如果我这样写代码

passport.deserializeUser((id, done) => {
   // id has the correct value, Twitter id for example when user tries to log in
     database.child('people').orderByChild('id').equalTo(id).once('value', user => {
     console.log(user.val()); //null
   });
     done(null, user.val());
});

user.val()返回null

如果我写

console.log(user)

user返回一个对象,即使该值相等或不相等。

我知道Firebase在Web控制台中拥有自己的身份验证方法,但是我想知道为什么这不起作用?数据库database.child().orderByChild()的相同方法在其他地方有效,但在passport.deserializeUser()中无效。

我已经设置了passport.sessioncookieParsercookieSession,浏览器确实从服务器接收到cookie,但是当我尝试反序列化用户时,它不起作用。当我尝试使用策略进行身份验证时,它会通过passport.deserialize(),但是Firebase部分无法工作,即使它具有正确的id值。

1 个答案:

答案 0 :(得分:1)

在您的代码中,user始终是DataSnapshot对象。如果您查询的位置没有数据,则该对象上的val()方法将返回null。这是Realtime Database查询的所有预期行为,与身份验证无关。