Because of some security-related limitations, Github prevents you from implementing the OAuth Web Application Flow on a client-side only application.
This is a real bummer. So we built Gatekeeper, which is the missing piece you need in order to make it work.
Gatekeeper works well with Github.js, which helps you accessing the Github API from the browser.
It is designed for drop-in hosting on Heroku.
GET http://localhost:9999/authenticate/TEMPORARY_CODE
Also see the documentation on Github.
Redirect users to request GitHub access.
GET https://github.com/login/oauth/authorizeGitHub redirects back to your site including a temporary code you need for the next step.
You can grab it like so:
varcode=window.location.href.match(/\?code=(.*)/)[1];
Request the actual token using your instance of Gatekeeper, which knows your
client_secret.$.getJSON('http://localhost:9999/authenticate/'+code,function(data){console.log(data.token);});
Clone it
git clone git@github.com:prose/gatekeeper.gitInstall Dependencies
cd gatekeeper && npm installAdjust config.json
{"client_id": "GITHUB_APPLICATION_CLIENT_ID","client_secret": "GITHUB_APPLICATION_CLIENT_SECRET","host": "github.com","port": 443,"path": "/login/oauth/access_token","method": "POST","server": {"port": 9999}}
You can also set environment variables to override the settings if you don't want Git to track your adjusted config.json file. Just use UPPER_CASE keys.
Serve it
$ node server.js
There are basic automated tests in spec/.
These can be ran with
npm tests
Create a new Heroku app
cake heroku:createRename it (optional)
heroku apps:rename NEW_NAMEProvide OAUTH_CLIENT_ID and OAUTH_CLIENT_SECRET:
cake -c OAUTH_CLIENT_ID -s OAUTH_CLIENT_SECRET heroku:configPush changes to heroku
cake heroku:push