我无法使用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.session
,cookieParser
和cookieSession
,浏览器确实从服务器接收到cookie,但是当我尝试反序列化用户时,它不起作用。当我尝试使用策略进行身份验证时,它会通过passport.deserialize()
,但是Firebase部分无法工作,即使它具有正确的id
值。
答案 0 :(得分:1)
在您的代码中,user
始终是DataSnapshot对象。如果您查询的位置没有数据,则该对象上的val()方法将返回null。这是Realtime Database查询的所有预期行为,与身份验证无关。