rkusa/koa-passport

Issue with ES6 (Babel) import directive...

Panoplos opened this issue · 1 comments

I've just starting playing with koa-passport in a ES6 (Babel) based React project I am working on, and I have run into an issue when using ES6 module import syntax as follows:

import * as passport from 'koa-passport'

async function fetchUser(id) {
  // Todo: This is first test code. Implement store logic...
  return {
    id: 1,
    username: process.env.USERNAME,
    password: digest(process.env.USER_PASSWORD),
    admin: process.env.USER_ADMIN
  }
}

passport.serializeUser((user, done) => {
  done(null, user.id)
})

passport.deserializeUser(async (id, done) => {
    fetchUser(id)
      .then(user => done(null, user))
      .catch(err => done(err))
  }
)

which results in:

/Users/panoplos/Documents/Projects/Node.js/react-apollo-koa-example/koa/auth.js:59
passport.serializeUser(function (user, done) {
         ^

TypeError: passport.serializeUser is not a function
    at Object.<anonymous> (/Users/panoplos/Documents/Projects/Node.js/react-apollo-koa-example/koa/auth.js:22:10)
    at Module._compile (module.js:571:32)
    at loader (/Users/panoplos/Documents/Projects/Node.js/react-apollo-koa-example/node_modules/babel-register/lib/node.js:144:5)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/panoplos/Documents/Projects/Node.js/react-apollo-koa-example/node_modules/babel-register/lib/node.js:154:7)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/panoplos/Documents/Projects/Node.js/react-apollo-koa-example/koa/index.js:34:1)

When I change the import to a const passport = require('koa-passport') directive, it works without issue.

Version info:

{
  ...
  "devDependencies": {
    "babel-cli": "^6.22.2",
    "babel-eslint": "^7.0.0",
    "babel-preset-es2015": "^6.22.0",
    "babel-preset-stage-2": "^6.22.0",
    "flow-bin": "^0.42.0",
    "flow-typed": "^2.0.0",
   },
  "dependencies": {
    ...
    "koa": "^2.2.0",
    "koa-bodyparser": "^3.2.0",
    "koa-generic-session": "^1.11.5",
    "koa-logger": "^2.0.1",
    "koa-passport": "^3.0.0",
    "koa-router": "^7.0.1",
    "passport-facebook": "^2.1.1",
    "passport-google-oauth2": "^0.1.6",
    "passport-local": "^1.0.0",
    "passport-twitter": "^1.0.4",
    "persistgraphql": "^0.3.1",
  },
  ...
}

Never mind... Just looked into the source and realised you are exporting passport as default. My bad...