Devise RPX Connectable

What is Devise?

What is RPX (now Janrain Engage)?

RPX (now called Janrain Engage) is a Software as a Service (SaaS) that helps you manage multiple authentication methods (FacebookConnect, Google, Twitter, OpenID, MySpace…) using a single API.
It also provides a multilingual connection widget.
Instead of managing multiple authentication providers and APIs, you just need to handle one.

Devise.setup do |config|
...
config.rpx_application_name = "mytestingapp" # The name of your RPX application (this is the name, NOT the API key!)
end

RPXNow:API Key

In config/application.rb or config/environments/YOUR_ENV.rb (to set a different key for each environment…) :

...
RPXNow.api_key = "aaaabbbbbccccdddddeeeeefffff"
...

Migrations
Run the following command

rails g model identity user_id:integer identifier:string

Add the following to your user model

has_many :identities

Then commit the model by running

rake db:migrate

Views

The RPX connection widget can be added in your application using a link or an iframe.
If you choose to use a link, the connection widget can be displayed in a new page (standard link) or using Javascript in overlay.

I added an easy to use helper to add a link to the RPX connection popup.

<%= link_to_rpx "Signin using RPX!", user_session_url %>

If you use the link alone, users will be redirected to a new page.
If you want the more sexy popup in overlay, you need to add the JS code before the </body> of your layout.
An helper is also included for this task :

...
<%= javascript_include_rpx(user_session_url) %>
</body>
</html>

If you want to display the connection widget in an iframe inside a page :

<%= embed_rpx user_session_url %>

Advanced

There is some advanced features that you may use…

Devise:Setup

Devise.setup do |config|
...
config.rpx_auto_create_account = true # false if you don't want to create users automaticaly. True by default.
config.rpx_additional_user_data = [:verifiedEmail, :url, :providerName,:photo] # default [], get some extra profile info from RPXnow, default only a few fields are available in the rpx_user object (https://rpxnow.com/docs#profile_data)
config.rpx_extended_user_data = true # false by default, extended data only available for Plus and Pro RPX users (https://rpxnow.com/docs#api_auth_info)
end

Devise:Model

There are two hooks that you may define in your model : before_rpx_success (called before each successful connection) and before_rpx_auto_create (called only once before the auto saving of the user instance, when rpx_auto_create_account is enabled).
You get in parameter the RPX User object from the RPXNow gem which is basically a Hash containing more or less information depending on your RPX configuration and account.
Read the RPXNow gem documentation for more information about this…

def before_rpx_success(rpx_user)
# Do something with rpx_user...
end
def before_rpx_auto_create(rpx_user)
# Do something with rpx_user
end