transloadit / uppy-server

[DEPRECATED] 'Uppy Server' was renamed to 'Companion' and lives inside the Uppy repo no
https://github.com/transloadit/uppy/tree/master/packages/%40uppy/companion
MIT License
114 stars 27 forks source link

Error: secretOrPrivateKey must have a value #73

Closed freder closed 6 years ago

freder commented 6 years ago

I'm trying to get uppy-server to work with dropbox:

// ...

expressApp.use(bodyParser.json());
expressApp.use(session({ secret: '...' }));

// ...

const options = {
    providerOptions: {
        dropbox: {
            key: '...',
            secret: '...',
        },
    },
    server: {
        host: `localhost:${PORT}`,
        protocol: 'http',
    },
    filePath: './uploads/'
};
expressApp.use(uppy.app(options));

// ...

but after connecting to dropbox / redirecting to http://localhost:3000/dropbox/callback I get this error:

Error: secretOrPrivateKey must have a value
    at Object.module.exports [as sign] (/path/to/project/node_modules/jsonwebtoken/sign.js:102:20)
    at Object.module.exports.generateToken (/path/to/project/node_modules/uppy-server/lib/server/token-service.js:8:16)
    at Object.callback [as self] (/path/to/project/node_modules/uppy-server/lib/server/controllers/callback.js:23:40)
    at routeDispatcher (/path/to/project/node_modules/uppy-server/lib/server/controllers/dispatcher.js:34:20)
    at Layer.handle [as handle_request] (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/layer.js:95:5)
    at next (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/layer.js:95:5)
    at /path/to/project/node_modules/uppy-server/node_modules/express/lib/router/index.js:281:22
    at param (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/index.js:354:14)
    at param (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/index.js:365:14)
    at paramCallback (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/index.js:401:21)
    at middleware (/path/to/project/node_modules/uppy-server/lib/server/provider/index.js:76:9)
    at paramCallback (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/index.js:404:7)
    at param (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/index.js:384:5)
    at Function.process_params (/path/to/project/node_modules/uppy-server/node_modules/express/lib/router/index.js:410:3)

looks like req.uppy.options.secret is undefined here https://github.com/transloadit/uppy-server/blob/master/src/server/controllers/callback.js#L24

ifedapoolarewaju commented 6 years ago

you need to set the secret option like so:

const options = {
    providerOptions: {
        dropbox: {
            key: '...',
            secret: '...',
        },
    },
    server: {
        host: `localhost:${PORT}`,
        protocol: 'http',
    },
    filePath: './uploads/',
        secret: 'my-secrety-secret'
};

this secret is used by the server and is different from that provided by the dropbox api.

freder commented 6 years ago

right, I just figured that out. — you should probably document that, since secret is not mentioned in the example in the readme.

ifedapoolarewaju commented 6 years ago

it's mentioned in the docs, see https://uppy.io/docs/server/#Options

freder commented 6 years ago

hmm, I must have overlooked that. thanks you, @ifedapoolarewaju