thgh / vercel-sapper

Vercel builder for Sapper with SSR enabled
MIT License
191 stars 25 forks source link

Does this work with Firebase auth? #24

Closed cindango closed 4 years ago

cindango commented 4 years ago

I copied my project files into the now-sapper demo project, and while it runs locally and builds on deploy, I get the 502 error.

502: BAD_GATEWAY Code: NO_STATUS_CODE_FROM_FUNCTION

This is my server.js file:

import sirv from 'sirv';
import express from 'express';
import compression from 'compression';
import * as sapper from '@sapper/server';
import bodyParser from 'body-parser'
import cookieParser from 'cookie-parser'
import admin from './firebase'

console.log('imports done')

const { PORT, NODE_ENV } = process.env;
const dev = NODE_ENV === 'development';

const app = express() // You can also use Express
    .use(
        compression({ threshold: 0 }),
        sirv('static', { dev }),
        cookieParser(),
        bodyParser.json(),
        (req, res, next) => {
            const sessionCookie = req.cookies["__session"] || '';
            // Verify the session cookie. In this case an additional check is added to detect
            // if the user's Firebase session was revoked, user deleted/disabled, etc.
            admin.auth().verifySessionCookie(
                sessionCookie, true /** checkRevoked */)
                .then((decodedClaims) => {
                    //serveContentForUser('/profile', req, res, decodedClaims);
                    console.log(decodedClaims)
                    res.currentUser = { displayName: decodedClaims.name }
                    next()
                })
                .catch(error => {
                    // Session cookie is unavailable or invalid. Force user to login.
                    //res.redirect('/login');
                    console.log(error)
                    res.clearCookie('__session');
                    res.currentUser = null
                    next()
                });
        },
        sapper.middleware({
            session: (req, res) => ({
                currentUser: res.currentUser
            })
        })
  )

console.log('PORT is', PORT)

app.listen(PORT, err => {
  if (err) console.log('error', err);
})

export default app.handler

And in my serverless functions:

[GET] /favicon.ico
23:24:49:48
imports done
PORT is 3000
2020-05-11T06:24:49.935Z    undefined   ERROR   Server is not listening TypeError: Cannot read property 'default' of undefined
    at Object.<anonymous> (/var/task/launcher.js:22:16)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Module.require (internal/modules/cjs/loader.js:1044:19)
    at require (internal/modules/cjs/helpers.js:77:18)
    at _tryRequire (/var/runtime/UserFunction.js:75:12)
    at _loadUserApp (/var/runtime/UserFunction.js:95:12)
    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)
RequestId: 47c128e2-232d-4e53-a8ce-543fb63f99d1 Error: Runtime exited with error: exit status 1
Runtime.ExitError
thgh commented 4 years ago

This probably fixes it:

- export default app.handler
+ export default app
thgh commented 4 years ago

Let us know if that didn't fix it!