app/controllers/devise/registrations_controller.rb in devise-1.1.9 vs app/controllers/devise/registrations_controller.rb in devise-1.2.rc
- old
+ new
@@ -1,23 +1,29 @@
class Devise::RegistrationsController < ApplicationController
- prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
+ prepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ]
prepend_before_filter :authenticate_scope!, :only => [:edit, :update, :destroy]
include Devise::Controllers::InternalHelpers
# GET /resource/sign_up
def new
build_resource({})
render_with_scope :new
end
- # POST /resource
+ # POST /resource/sign_up
def create
build_resource
if resource.save
- set_flash_message :notice, :signed_up
- sign_in_and_redirect(resource_name, resource)
+ if resource.active?
+ set_flash_message :notice, :signed_up
+ sign_in_and_redirect(resource_name, resource)
+ else
+ set_flash_message :notice, :inactive_signed_up, :reason => resource.inactive_message.to_s
+ expire_session_data_after_sign_in!
+ redirect_to after_inactive_sign_up_path_for(resource)
+ end
else
clean_up_passwords(resource)
render_with_scope :new
end
end
@@ -29,29 +35,76 @@
# PUT /resource
def update
if resource.update_with_password(params[resource_name])
set_flash_message :notice, :updated
+ sign_in resource_name, resource, :bypass => true
redirect_to after_update_path_for(resource)
else
clean_up_passwords(resource)
render_with_scope :edit
end
end
# DELETE /resource
def destroy
resource.destroy
- set_flash_message :notice, :destroyed
sign_out_and_redirect(self.resource)
+ set_flash_message :notice, :destroyed
end
+ # GET /resource/cancel
+ # Forces the session data which is usually expired after sign
+ # in to be expired now. This is useful if the user wants to
+ # cancel oauth signing in/up in the middle of the process,
+ # removing all OAuth session data.
+ def cancel
+ expire_session_data_after_sign_in!
+ redirect_to new_registration_path(resource_name)
+ end
+
protected
+ # Build a devise resource passing in the session. Useful to move
+ # temporary session data to the newly created user.
+ def build_resource(hash=nil)
+ hash ||= params[resource_name] || {}
+ self.resource = resource_class.new_with_session(hash, session)
+ end
+
+ # The path used after sign up. You need to overwrite this method
+ # in your own RegistrationsController.
+ def after_sign_up_path_for(resource)
+ after_sign_in_path_for(resource)
+ end
+
+ # Overwrite redirect_for_sign_in so it takes uses after_sign_up_path_for.
+ def redirect_for_sign_in(scope, resource) #:nodoc:
+ redirect_to stored_location_for(scope) || after_sign_up_path_for(resource)
+ end
+
+ # The path used after sign up for inactive accounts. You need to overwrite
+ # this method in your own RegistrationsController.
+ def after_inactive_sign_up_path_for(resource)
+ root_path
+ end
+
+ # The default url to be used after updating a resource. You need to overwrite
+ # this method in your own RegistrationsController.
+ def after_update_path_for(resource)
+ if defined?(super)
+ ActiveSupport::Deprecation.warn "Defining after_update_path_for in ApplicationController " <<
+ "is deprecated. Please add a RegistrationsController to your application and define it there."
+ super
+ else
+ after_sign_in_path_for(resource)
+ end
+ end
+
# Authenticates the current scope and gets a copy of the current resource.
# We need to use a copy because we don't want actions like update changing
# the current user in place.
def authenticate_scope!
send(:"authenticate_#{resource_name}!")
- self.resource = resource_class.find(send(:"current_#{resource_name}").id)
+ self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
end
end