React TypeScript/Firebase -属性 '_tokenResponse' 在类型 'UserCredential' 上不存在

React TypeScript/Firebase -Property '_tokenResponse' does not exist on type 'UserCredential'

我是打字稿的新手,我正在尝试将我的反应项目转换为打字稿。 我正在通过 firebase 创建用户,但它给了我这个错误 属性 '_tokenResponse' does not exist on type 'UserCredential'. 我该如何解决这个问题?

createUserWithEmailAndPassword(auth,values.email,values.password)
                       .then((userCredential) => {
                        console.log(userCredential);
                        setSubmitting(false);
                        authContext.logIn(userCredential._tokenResponse.idToken);
                        navigate('/');
                      }).catch((err)=>{
                        setError(err.message);
                      })

authContext 的完整代码

import React, {useState} from 'react';

const AuthContext=React.createContext({
    token:'',
    isLoggedIn:false,
    logIn:(token:string)=>{},
    logOut:()=>{},
});

export const AuthContextProvider:React.FC=(props)=>{
    const initialToken=localStorage.getItem('token')??'';
    const [token,setToken]=useState(initialToken);

    const userIsLoggedIn=!!token;
    //console.log(userIsLoggedIn);

    const loginHandler=(token:string)=>{
       // console.log(token);
        setToken(token);
        localStorage.setItem('token',token);
    }

    const logoutHandler=()=>{
        setToken('');
        localStorage.removeItem('token');
    }

    const contextValue={
        token:token,
        isLoggedIn:userIsLoggedIn,
        logIn:loginHandler,
        logOut:logoutHandler
    };

    return(
        <AuthContext.Provider value={contextValue}>
            {props.children}
        </AuthContext.Provider>
    )
}

export const useAuth=()=>{
    const context = React.useContext(AuthContext)
    if (context === undefined) {
      throw new Error('useAuth must be used within a AuthContextProvider')
    }
    return context
  }

export default AuthContext;```

UserCredential 似乎没有 uid(_tokenResponse) 属性。我最好的猜测是您正在寻找 user.user.uid.

const user = userCredential.user;

使用 Firebase JavaScript SDK 时,您不需要自己处理令牌,它们由 SDK 本身在后台处理。

如您所见

https://firebase.google.com/docs/reference/js/v8/firebase.auth.Auth#createuserwithemailand

On successful creation of the user account, this user will also be signed in to your application

要在您关闭页面时让您的用户保持登录状态,请在此处查看持久性部分

https://firebase.google.com/docs/auth/web/auth-state-persistence#modifying_the_auth_state_persistence

还有这里

https://firebase.google.com/docs/auth/web/auth-state-persistence#supported_types_of_auth_state_persistence

所以基本上,不要尝试读取应该受到保护的令牌。