Skip to content
Ruby: user login/creation and view helpers Facebook, Twitter, Google, MSN, OpenID, MySpace, Yahoo -- All in One
Branch: master
Clone or download
grosser Merge pull request #24 from bryant1410/master
Fix broken headings in Markdown files
Latest commit ab8cc22 Apr 18, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
certs merge conflic and now everything is one big commit :< Jun 17, 2009
lib v0.7.1 Jul 6, 2013
spec fix javascript fallback reference Jul 6, 2013
.gitignore ignore .rvmrc Jun 22, 2013
CHANGELOG update changelog Feb 20, 2010
Gemfile cleanup Jun 22, 2013
Gemfile.lock cleanup Jun 22, 2013
Rakefile cleanup Jun 22, 2013 Fix broken Markdown headings Apr 18, 2017
rpx_now.gemspec version is in gemspec Jun 22, 2013

Janrain Engage (formerly known as RPXNow):

  • Login to your page through Facebook / Twitter / Myspace / Google / OpenId / MS-LiveId / AOL / ...
  • Simpler then OpenId/OAuth/xxx for developers AND users
  • Publish user activity to facebook/twitter/myspace/.../-stream via the same API
  • Returning users are greeted by their choosen provider
  • Free for up to 2500 accounts/year (above 5k it gets expensive...)

Single Interface for all providers Share comments and activities Visitors choose from providers they already have



gem install rpx_now


Example application, go play around!


RPXNow.api_key = "YOU RPX API KEY"


This example uses the SessionsController, if you dont have one built it and add routes(rpx_token is a post request)

skip_before_filter :verify_authenticity_token, :only => [:rpx_token] # RPX does not pass Rails form tokens...

# user_data
# found: {:name=>'John Doe', :username => 'john', :email=>'', :identifier=>''}
# not found: nil (can happen with e.g. invalid tokens)
def rpx_token
  raise "hackers?" unless data = RPXNow.user_data(params[:token])
  self.current_user = User.find_by_identifier(data[:identifier]) || User.create!(data)
  redirect_to '/'

# getting additional profile fields (these fields are rarely filled)
# all possibilities:
data = RPXNow.user_data(params[:token], :additional => [:gender, :birthday, :photo, :providerName, ...])

# normal + raw data
RPXNow.user_data(params[:token], :additional => [:raw_response])[:raw_response]['profile]['verifiedEmail']

# only raw data
email = RPXNow.user_data(params[:token], :raw_response => true)['profile']['verifiedEmail']

# with extended info like friends, accessCredentials, portable contacts. (most Providers do not supply them)
RPXNow.user_data(params[:token], :extended => true)[:extended]['friends'][...have a look at the RPX API DOCS...]


<%=RPXNow.embed_code('My-Rpx-Domain', url_for(:controller => :session, :action => :rpx_token, :only_path => false))%>
<%=RPXNow.popup_code('Login here...', 'My-Rpx-Domain', url_for(:controller => :session, :action => :rpx_token, :only_path => false), options)%>


:language => 'en' janrain tries to detect the users language, but you may overwrite it possible languages
:default_provider => 'google' possible default providers
:flags => 'show_provider_list' possible flags
:html => {:id => 'xxx'} is added to the popup link (popup_code only)
:fallback_url => :enable forces fallback link to /openid/embed url (default)
:fallback_url => :disable disables fallback url (will mean Javascript is required for users to sign in)
:fallback_url => :legacy forces fallback to legacy widget url

For more on the status of fallback URLs see Janrain Support Forum discussion

Unobtrusive / JS-last

popup_code can also be called with :unobtrusive => true ( --> just link without javascript include). To still get the normal popup add RPXNow.popup_source('My-Rpx-Domain', url_for(:controller => :session, :action => :rpx_token, :only_path => false), [options])
Options like :language / :flags should be given for both.



RPXNow.api_version = 2

Custom domain (Plus/Pro)

RPXNow.domain = ''

Mappings (Plus/Pro)

You can map your primary keys (e.g. to identifiers, so that
users can login to the same account with multiple identifiers., primary_key) #add a mapping
RPXNow.unmap(identifier, primary_key) #remove a mapping
RPXNow.mappings(primary_key) # [identifier1,identifier2,...]
RPXNow.all_mappings # [["1",['','']], ["2",[...]], ... ]

After a primary key is mapped to an identifier, when a user logs in with this identifier, RPXNow.user_data will contain his primaryKey as :id. A identifyer can only belong to one user (in doubt the last one it was mapped to)

User integration (e.g. ActiveRecord)

class User < ActiveRecord::Base
  include RPXNow::UserIntegration

user.rpx.identifiers == RPXNow.mappings( ==,
user.rpx.unmap(identifier) == RPXNow.unmap(identifier,

Contacts (Pro)

Retrieve all contacts for a given user: RPXNow.contacts(identifier).each {|c| puts "#{c['displayName']}: #{c['emails']}}

Status updates (Pro)

Send a status update to provider (a tweet/facebook-status/...) : RPXNow.set_status(identifier, "I just registered at ...")

Activity (Pro)

Post a users activity, on their e.g. Facebook profile, complete with images, titels, rating, additional media, customized links and so on ...

RPXNow.activity( identifier,
  :url => href, :action => 'Im loving my new', :user_generated_content => 'Im loving my new ... ',
  :title => product.title, :description => product.description,
  :action_links => [{:text => 'view >>', :href => product_url(product, :only_path => false)}],
  :media => [{:type => :image, :src => product.image_url, :href => product_url(product, :only_path => false)}]

Offline user data access (Plus/Pro)

Same response as auth_info but can be called with a identifier at any time.
Offline Profile Access must be enabled.

RPXNow.get_user_data(identifier, :extended => true)

Auth info

Same response as user_data with :raw_response, but without any kind of failure detection or post processing. RPXNow.auth_info(params[:token])


rpx_now_gem mailing list


Michael Grosser
Hereby placed under public domain, do what you want, just do not hold me accountable...

You can’t perform that action at this time.