module Devise::Controllers::StoreLocation

Provide the ability to store a location. Used to redirect back to a desired path after sign in. Included by default in all controllers.

Public Instance Methods

store_location_for(resource_or_scope, location) click to toggle source

Stores the provided location to redirect the user after signing in. Useful in combination with the ‘stored_location_for` helper.

Example:

store_location_for(:user, dashboard_path)
redirect_to user_omniauth_authorize_path(:facebook)
# File lib/devise/controllers/store_location.rb, line 34
def store_location_for(resource_or_scope, location)
  session_key = stored_location_key_for(resource_or_scope)
  uri = parse_uri(location)
  if uri
    path = [uri.path.sub(/\A\/+/, '/'), uri.query].compact.join('?')
    path = [path, uri.fragment].compact.join('#')
    session[session_key] = path
  end
end
stored_location_for(resource_or_scope) click to toggle source

Returns and delete (if it’s navigational format) the url stored in the session for the given scope. Useful for giving redirect backs after sign up:

Example:

redirect_to stored_location_for(:user) || root_path
# File lib/devise/controllers/store_location.rb, line 16
def stored_location_for(resource_or_scope)
  session_key = stored_location_key_for(resource_or_scope)

  if is_navigational_format?
    session.delete(session_key)
  else
    session[session_key]
  end
end

Private Instance Methods

parse_uri(location) click to toggle source
# File lib/devise/controllers/store_location.rb, line 46
def parse_uri(location)
  location && URI.parse(location)
rescue URI::InvalidURIError
  nil
end
stored_location_key_for(resource_or_scope) click to toggle source
# File lib/devise/controllers/store_location.rb, line 52
def stored_location_key_for(resource_or_scope)
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  "#{scope}_return_to"
end