Skip to content

Commit

Permalink
Move duplicate sign_in logic to sign_in().
Browse files Browse the repository at this point in the history
  • Loading branch information
josevalim committed Dec 20, 2010
1 parent c27bc21 commit 13e8bc2
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 7 deletions.
10 changes: 3 additions & 7 deletions lib/devise/controllers/helpers.rb
Expand Up @@ -110,6 +110,8 @@ def sign_in(resource_or_scope, *args)

if options[:bypass]
warden.session_serializer.store(resource, scope)
elsif warden.user(scope) == resource && !options.delete(:force)
# Do nothing. User already signed in and we are not forcing it.
else
warden.set_user(resource, options.merge!(:scope => scope))
end
Expand Down Expand Up @@ -199,13 +201,7 @@ def sign_in_and_redirect(resource_or_scope, *args)
options = args.extract_options!
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource = args.last || resource_or_scope

if warden.user(scope) == resource
expire_session_data_after_sign_in!
else
sign_in(scope, resource, options)
end

sign_in(scope, resource, options)
redirect_for_sign_in(scope, resource)
end

Expand Down
16 changes: 16 additions & 0 deletions test/controllers/helpers_test.rb
Expand Up @@ -90,16 +90,32 @@ def setup

test 'sign in proxy to set_user on warden' do
user = User.new
@mock_warden.expects(:user).returns(nil)
@mock_warden.expects(:set_user).with(user, :scope => :user).returns(true)
@controller.sign_in(:user, user)
end

test 'sign in accepts a resource as argument' do
user = User.new
@mock_warden.expects(:user).returns(nil)
@mock_warden.expects(:set_user).with(user, :scope => :user).returns(true)
@controller.sign_in(user)
end

test 'does not sign in again if the user is already in' do
user = User.new
@mock_warden.expects(:user).returns(user)
@mock_warden.expects(:set_user).never
@controller.sign_in(user)
end

test 'sign in again when the user is already in only if force is given' do
user = User.new
@mock_warden.expects(:user).returns(user)
@mock_warden.expects(:set_user).with(user, :scope => :user).returns(true)
@controller.sign_in(user, :force => true)
end

test 'sign in accepts bypass as option' do
user = User.new
@mock_warden.expects(:session_serializer).returns(serializer = mock())
Expand Down

0 comments on commit 13e8bc2

Please sign in to comment.