firebase暂时发送“没有用户记录”?

问题描述 投票:1回答:1

我正在尝试制作一个简单的Web应用程序,并尝试使用护照实施Google身份验证(登录)并将用户存储在firebase身份验证中。

因此,在护照中间件中,我所做的是检查用户是否经过身份验证。如果是,则将用户传递给passport.serializeUser(user)否则在firebase身份验证中创建用户。然后将用户传递给passport.serializeUser(user)

这是一个伪代码 -

if (user.authenticated){

   done(null, user)

} else {

let promise = {'uid': user.uid, 'name': user.displayName, 'picture':user.photos[0].value};

   firebase.auth().createUser({
            uid: user.uid,
            displayName: user.name,
            photoURL: user.picture

        });
   console.log('i have submitted the user')
   done(null, promise)
 }

一切都很酷passport.serializeUser()得到和用户调用done(null, user.uid)

这个问题在passport.deserializeUser()时命中。

我没有在那里做任何想象,但只是通过使用firebase.auth().getUser(id)从firebase获取用户,它给我一个错误。

这是我的passport.deserializeUser()代码。

passport.deserializeUser((id, done) => { // when we get a request

    console.log(`deser id ${id}`); // it shows the id we passed in serialize

    firebase.auth().getUser(id).then(  // gives an error T_T ?
        (user) => {
            console.log(`deser data ${user}`); // IT SHOULD GO HERE

            done(null, user)

        }).catch((error) => { // it goes here and throws an error at me 

        console.log(`here is the error on deser ${error}`);
       // here is the error on deser Error: There is no user record corresponding to the provided identifier.

    });

});

魔法发生在一段时间之后,passport.deserealizeUser()现在再次被调用,因为某些原因它不会给我带来错误。

这是控制台日志..

i have submitted the user
ser // i do this call in passport.serializeUser()
deser id "someid"
here is the error on deser Error: There is no user record corresponding to the provided identifier. 
deser id "someid"
deser data [object Object]

我的问题是,为什么火力基地会被推迟?是因为第一次没有加载firebase,第二次加载并成功找到用户?

但是可能是什么原因呢?任何猜测?

node.js firebase firebase-authentication passport.js
1个回答
1
投票

好吧,大家小睡后,我发现了我做错了什么,我没有处理来自...的承诺。

firebase.auth().createUser({
            uid: user.uid,
            displayName: user.name,
            photoURL: user.picture

        });

所以我做的就是......

firebase.auth().createUser({
            uid: user.uid,
            displayName: user.name,
            photoURL: user.picture

        }).then((user) => {
        done(null, user);
});

当然需要一些时间来处理auth()中的用户..

这就是为什么。

总是使用PROMISES。

© www.soinside.com 2019 - 2024. All rights reserved.