我正在进行条带扩展,但当我传递uid时,它会给我错误"firebase__WEBPACK_IMPORTED_MODULE_3___default.a.a.auth.onAuthStateChanged不是函数"。。。那么,有什么建议我该如何修复这个错误吗??
这是我的代码:
import {loadStripe} from '@stripe/stripe-js';
import firebase from 'firebase';
const firestore = firebase.firestore();
firebase.auth().onAuthStateChanged((user) => {
if(user) {
console.log(user.uid) ;
}
});
export async function createCheckoutSession(uid){
firebase.auth.onAuthStateChanged((user) => {
if (user){
const checkoutSessionRef = firestore
.collection('customers')
.doc(user.uid)
.collection('checkout_sessions')
.add({
price: 'price id',
success_url: window.location.origin,
cancel_url: window.location.origin,
});
// Wait for the CheckoutSession to get attached by the extension
checkoutSessionRef.onSnapshot((snap) => {
const { error, sessionId } = snap.data();
if (error) {
// Show an error to your customer and
// inspect your Cloud Function logs in the Firebase console.
alert(`An error occured: ${error.message}`);
}
if (sessionId) {
// We have a session, let's redirect to Checkout
// Init Stripe
const stripe = loadStripe('pk_test_1234');
stripe.redirectToCheckout({ sessionId });
}
});
}
}
)}
有什么建议吗?我该如何修复这个错误???
firebase
中的onAuthStateChanged
函数只能在客户端工作。根据我的理解,您试图检查用户是否已登录或注销,但在后端本身调用了onAuthStateChanged
侦听器。
因此,将逻辑或onAuthStateChanged
逻辑移动到前端代码。如果你真的想使用一个逻辑来检查用户是否已经通过后端本身登录,那么你可能不得不求助于云功能,并使用firebase adming SDK来处理它。
此外,loadStripe
承诺应该在文件的顶部处理,以避免在每次调用时重新创建Stripe
对象。