0

I am an "advanced beginner" with javascript API's so my needs maybe sophomoric, but after pounding my head against the wall all night appreciate any basic guidance you can provide. I am trying to authenticate an app using Oauth2 to hit my BaseCamp site.

I am using Grant Express and have registered my app successfully such that I received client_ID, client_secret and redirect uri. For the redirect uri I added a folder called "auth" but the only thing in it is an index.html file that is blank. So the redirect url is http://example.com/auth.

On my local machine I have created a directory called oauth and within it ran: npm install express npm install grant-express

I created a file app.js that looks like this:

var express = require('express')
  , session = require('express-session')
var Grant = require('grant-express')

var config = {

  server: {
    protocol: "http",
    host: "127.0.0.1:3000"
    },
  basecamp: {
    key: "key_from_basecamp",
    secret: "secret_from_basecamp",
    callback: "/basecamp/callback"
  }
}

var app = express()
app.use(session({secret:'grant',
    resave: true,
    saveUninitialized: true}))
app.use(new Grant(config))   
app.get("/basecamp/callback", function (req, res) {
  console.log(req.query)
  res.end(JSON.stringify(req.query, null, 2))
})    
app.listen(3000, function () {
  console.log('Express server listening on port ' + 3000)
})

The package.json file looks like this:

{
  "name": "auth",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "dependencies": {
    "express": "^4.13.4",
    "grant-express": "^3.6.0"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

I go to the terminal and enter node app.js and get the response: Express server listening on port 3000. All good right?

When I go to my browser and type in http://localhost:3000/connect/basecamp the url does redirect to: https://launchpad.37signals.com/authorization/new?client_id=client_id_from_basecamp&response_type=code&redirect_uri=http%3A%2F%2F127.0.0.1%3A3000%2Fconnect%2Fbasecamp%2Fcallback&type=web_server but the page contains this error: :error: Provided redirect_uri is not approved

If I got to: http://localhost:3000/connect/basecamp/callback I see this error (also in the console of the server) { error: { error: 'Grant: OAuth2 missing code parameter' } }

In the Basecamp API documentation it says: Configure your OAuth 2 library with your client_id, client_secret, and redirect_uri. Tell it to use https://launchpad.37signals.com/authorization/new to request authorization and https://launchpad.37signals.com/authorization/token to get access tokens. What is "it" and how, exactly would I tell it to use these urls? Do I add these url's into my app.js file as objects? Or do I go into another file? Do I need to add something into http://example.com/auth?

Not sure where to go from here.... Many thanks for any assistance.

simo
  • 15,078
  • 7
  • 45
  • 59
edswartz
  • 491
  • 3
  • 13

1 Answers1

0

The problem was my redirect url. It should be http://localhost:3000/connect/basecamp/callback On to new errors!

edswartz
  • 491
  • 3
  • 13