Class: DeviseTokenAuth::OmniauthCallbacksController

Inherits:
ApplicationController show all
Defined in:
app/controllers/devise_token_auth/omniauth_callbacks_controller.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from ApplicationController

#resource_data, #resource_errors

Instance Attribute Details

#auth_paramsObject (readonly)

Returns the value of attribute auth_params.



5
6
7
# File 'app/controllers/devise_token_auth/omniauth_callbacks_controller.rb', line 5

def auth_params
  @auth_params
end

Instance Method Details

#omniauth_failureObject



48
49
50
51
# File 'app/controllers/devise_token_auth/omniauth_callbacks_controller.rb', line 48

def omniauth_failure
  @error = params[:message]
  render_data_or_redirect('authFailure', error: @error)
end

#omniauth_success {|@resource| ... } ⇒ Object

Yields:

  • (@resource)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/controllers/devise_token_auth/omniauth_callbacks_controller.rb', line 29

def omniauth_success
  get_resource_from_auth_hash
  set_token_on_resource
  create_auth_params

  if confirmable_enabled?
    # don't send confirmation email!!!
    @resource.skip_confirmation!
  end

  (:user, @resource, store: false, bypass: false)

  @resource.save!

  yield @resource if block_given?

  render_data_or_redirect('deliverCredentials', @auth_params.as_json, @resource.as_json)
end

#redirect_callbacksObject

intermediary route for successful omniauth authentication. omniauth does not support multiple models, so we must resort to this terrible hack.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/controllers/devise_token_auth/omniauth_callbacks_controller.rb', line 11

def redirect_callbacks

  # derive target redirect route from 'resource_class' param, which was set
  # before authentication.
  devise_mapping = [request.env['omniauth.params']['namespace_name'],
                    request.env['omniauth.params']['resource_class'].underscore.gsub('/', '_')].compact.join('_')
  path = "#{Devise.mappings[devise_mapping.to_sym].fullpath}/#{params[:provider]}/callback"
  klass = request.scheme == 'https' ? URI::HTTPS : URI::HTTP
  redirect_route = klass.build(host: request.host, port: request.port, path: path).to_s

  # preserve omniauth info for success route. ignore 'extra' in twitter
  # auth response to avoid CookieOverflow.
  session['dta.omniauth.auth'] = request.env['omniauth.auth'].except('extra')
  session['dta.omniauth.params'] = request.env['omniauth.params']

  redirect_to redirect_route
end