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

时间:2018-02-28 14:42:15

标签: node.js firebase firebase-authentication passport.js

我正在尝试创建一个简单的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,第二次加载并成功找到用户?

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

1 个答案:

答案 0 :(得分: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。