我正在尝试创建一个简单的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,第二次加载并成功找到用户?
但可能是什么原因? 任何猜测?
答案 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。