Set up omniauth Github authentication for different environments (dev, prod) in a Rails app

Recently, I’ve been developing a personal project that makes use of the Github oauth api. For this purpose, I use the devise gem with support for omniauth. I figured I’d need two different sets of credentials for Github authentication since I want to develop locally and test my app on production. It turned out pretty easy.

config.omniauth :github, ENV['GITHUB_ID'], ENV['GITHUB_SECRET'], :scope => 'user,public_repo'

Ruby can read environment variables on your computer through the ENV hash. If you’re on Mac and you the bash shell, all you have to do is to open ~/.bash_profile and add (don’t forget to restart the shell for these variables to take effect)

export GITHUB_ID="Your github app id"
export GITHUB_SECRET="Your github app secret"

(by the way, you can register your app here

To push these values to Heroku (if it’s the platform you deploy to) do

heroku config:add GITHUB_ID=[Your github app id] GITHUB_SECRET=[Your github app secret]

The technique also works for Twitter and Facebook authentication strategy.