Estoy muy confundido acerca de cómo hacer que el usuario actual con SSR obtenga algunos datos de usuario.
He estado usando la API de contexto con reaccionar, y ha estado funcionando hasta ahora, hasta que necesito SSR para obtener datos de una API. Quiero obtener la identificación de usuario actual, para poder obtener un token que esté almacenado en Firestore.
autenticación.js
export const AuthContext = createContext(); export function AuthProvider({ children }) { const [currentUser, setCurrentUser] = useState(null); useEffect(() => { onAuthStateChanged(auth, (user) => { setCurrentUser(user); }); }, []); return ( <AuthContext.Provider value={{ currentUser }}> {children} </AuthContext.Provider> ); }RSS
export async function getStaticProps() { const api = { auth: "token", }; //fetch api return { props: { data, }, }; }Los SDK de Firebase están destinados a usarse solo en el lado del cliente, por lo que no podrá obtener el usuario actual en el lado del servidor a menos que configure una cookie. Cada vez que un usuario inicia sesión, puede llamar a su API, que creará una cookie de sesión con Firebase Admin y la configurará.
app.post('/sessionLogin', (req, res) => { const idToken = req.body.idToken.toString(); const expiresIn = 60 * 60 * 24 * 5 * 1000; return admin .auth() .createSessionCookie(idToken, { expiresIn }) .then( (sessionCookie) => { const options = { maxAge: expiresIn, httpOnly: true, secure: true }; res.cookie('session', sessionCookie, options); res.end(JSON.stringify({ status: 'success' })); }, (error) => { res.status(401).send('UNAUTHORIZED REQUEST!'); } ); }); Puede leer la cookie de session en getServerSideProps y verificarla para obtener el UID del usuario:
const decoded = await admin.auth().verifySessionCookie(sessionCookie)