Omniauth_Dailycred

This gem is intended for users who solely want to interact with dailycred through omniauth. If you are looking into a more comprehensive authentication solution with dailycred, you should see our rails engine.

Because we've extracted OAuth login from the Rails engine into its own omniauth gem, it's now extremely easy to implement dailycred in an existing project.

Why?

Even if you've already set up authentication, Dailycred can be extremely helpful as a proxy for other authentication providers. For example:

  • Not all OAuth providers allow you to pass state, and none of them allow you to pass additional parameters like 'referrer'.
  • You get instant access to a comprehensive dashboard to view your users and get a deeper insight into their behavior.
  • Only implement one omniauth provider, and then send your user to any identity provider by sending them to the following route:

    /auth/dailycred?identity_provider=[provider]

Installation

In your gemfile

gem 'omniauth_dailycred'

Then run bundle.

Usage

Create an initializer at config/initializers/omniauth.rb with the following:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :dailycred, ENV['DAILYCRED_CLIENT_ID'], ENV['DAILYCRED_SECRET']
end

Then simply send your users to auth/dailycred and they will be forwarded through the OAuth flow. The following parameters can be passed along to dailycred:

  1. action
  2. identity_provider
  3. referrer
  4. access_token

If you run into an SSL Error, it's because omniauth can't find your ssl certicate. Try modifying config/initializers/omniauth.rb to look like the following:

opts = {:client_options => {:ssl => {}}}

if File.exists?('/etc/ssl/certs')
  opts[:client_options][:ssl][:ca_path] = '/etc/ssl/certs'
end
if File.exists?('/opt/local/share/curl/curl-ca-bundle.crt')
  opts[:client_options][:ssl][:ca_file] = '/opt/local/share/curl/curl-ca-bundle.crt'
end

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :dailycred, ENV['DAILYCRED_CLIENT_ID'], ENV['DAILYCRED_SECRET'], opts
end

Follow the omniauth instructions to integrate omniauth into your application for further setup details.

In your callback, request.env['omniauth.auth'] will look something like the following:

{
       "provider" => "dailycred",
            "uid" => "userid-xx-yy",
           "info" => {
                 "token" => "token-xxyy-token",
              "provider" => "dailycred",
                   "uid" => "userid-xx-yy",
                   "ban" => false,
             "user_type" => "CONVERTED",
            "identities" => {},
               "display" => "[email protected]",
                "emails" => {},
               "picture" => "https://www.dailycred.com/user/pic?user_id=userid-xx-yy&size=50",
            "updated_at" => 1366670682849,
               "created" => Mon, 15 Apr 2013 18:20:28 +0000,
                 "email" => "[email protected]",
        "last_logged_in" => 1366670682848,
              "verified" => false,
                 "guest" => false,
            "attributes" => {},
         "access_tokens" => {
            "dailycred" => "token-xxyy-token"
        },
          "access_token" => "token-xxyy-token"
    },
    "credentials" => {
          "token" => "token-xxyy-token",
        "expires" => false
    },
          "extra" => {}
}