Class: Devise::RpxConnectable::Strategies::RpxConnectable

Inherits:
Strategies::Base
  • Object
show all
Defined in:
lib/devise_rpx_connectable/strategy.rb

Overview

Default strategy for signing in a user using RPX. Redirects to sign_in page if it’s not authenticated

Instance Method Summary collapse

Instance Method Details

#authenticate!Object

Authenticate user with RPX.

Raises:

  • (StandardError)


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/devise_rpx_connectable/strategy.rb', line 18

def authenticate!
  klass = mapping.to
  raise StandardError, "RPXNow API key is not defined, please see the documentation of RPXNow gem to setup it." unless RPXNow.api_key.present?

  request_keys = klass.request_keys.inject({}) do |res, k|
    res[k] = params[k]
    res
  end

  rpx_user = RPXNow.user_data(params[:token], {
    :additional => klass.rpx_additional_user_data,
    :extended => klass.rpx_extended_user_data
  })

  fail!(:rpx_invalid) and return unless rpx_user

  if user = klass.authenticate_with_rpx(:identifier => rpx_user["identifier"], :request_keys => request_keys )
    user.on_before_rpx_success(rpx_user)
    success!(user)
    return
  end

  fail!(:rpx_invalid) and return unless klass.rpx_auto_create_account?

  user = klass.new
  user.store_rpx_credentials!(rpx_user.merge(:request_keys => request_keys))
  user.on_before_rpx_auto_create(rpx_user)

  user.save(:validate => false)
  user.on_before_rpx_success(rpx_user)
  success!(user)
end

#valid?Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/devise_rpx_connectable/strategy.rb', line 12

def valid?
  valid_controller? && valid_params? && mapping.to.respond_to?('authenticate_with_rpx')
end