Why can I not use auth.currentuser.uid in getServerSideProps?

Viewed 150

It may be a fundamental concept but I can't find anything to my issue.

const userDoc = getUserWithUID(auth.currentUser.uid);

Cannot read property 'uid' of null

import ImageUploader from "../components/ImageUploader";
import {auth, getUserWithUID, postToJSON} from "../lib/firebase";
import {useContext} from "react";
import {UserContext} from "../lib/context";

export async function getServerSideProps(context)  {
    const userDoc = getUserWithUID(auth.currentUser.uid);

    return {props: {userDoc}} ;
}

export default function SettingsPage() {
    return (
        <main>
            <ImageUploader></ImageUploader>
        </main>
    )

/ Firebase lib file

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import 'firebase/storage';

const firebaseConfig = {
    apiKey: process.env.NEXT_PUBLIC_API_KEY,
    authDomain: process.env.NEXT_PUBLIC_AUTH_DOMAIN,
    projectId: process.env.NEXT_PUBLIC_PROJECT_ID,
    storageBucket: process.env.NEXT_PUBLIC_STORAGE_BUCKET,
    messagingSenderId: process.env.NEXT_PUBLIC_MESSAGING_SENDER_ID,
    appId: process.env.NEXT_PUBLIC_APP_ID,
    measurementId: process.env.NEXT_PUBLIC_MEASUREMENT_ID
};

if(!firebase.apps.length) {
    firebase.initializeApp(firebaseConfig);
}

export const auth = firebase.auth();
export const googleAuthProvider = new firebase.auth.GoogleAuthProvider();

export const firestore = firebase.firestore();
// Storage exports
export const storage = firebase.storage();
export const STATE_CHANGED = firebase.storage.TaskEvent.STATE_CHANGED;

export const fromMillis = firebase.firestore.Timestamp.fromMillis;
export const serverTimestamp = firebase.firestore.FieldValue.serverTimestamp;

/**`
 * Gets a users/{uid} document with company
 * @param  {string} company
 */
export async function getUserWithCompany(company) {
    const usersRef = firestore.collection('users');
    const query = usersRef.where('company', '==', company).limit(1);
    const userDoc = (await query.get()).docs[0];
    return userDoc;
}

export async function getUserWithUID(uid) {
    const userDoc = await firestore.collection('users').doc(uid).get();
    return userDoc;
}
1 Answers

As far as my understanding goes, getServerSideProps() is only executed on the server and therefore has no access to frontEnd Data such as the Google authentication token and the corresponding userID. Hope this helps, even though you asked one month ago. :)

Related