if @user.save
flash[:notice] = t 'user.new.flash create success message'
- Notifier.deliver_signup_confirm(@user, @user.tokens.create)
+ Notifier.deliver_signup_confirm(@user, @user.tokens.create(:referer => params[:referer]))
redirect_to :action => 'login'
else
render :action => 'new'
@user.active = true
@user.email_valid = true
@user.save!
+ referer = token.referer
token.destroy
flash[:notice] = t 'user.confirm.success'
session[:user] = @user.id
- redirect_to :action => 'account', :display_name => @user.display_name
+ unless referer.nil?
+ redirect_to referer
+ else
+ redirect_to :action => 'account', :display_name => @user.display_name
+ end
else
@notice = t 'user.confirm.failure'
end
<h1><%= t 'user.login.heading' %></h1>
-<p><%= t 'user.login.please login', :create_user_link => link_to(t('user.login.create_account'), :controller => 'user', :action => 'new') %></p>
+<p><%= t 'user.login.please login', :create_user_link => link_to(t('user.login.create_account'), :controller => 'user', :action => 'new', :referer => params[:referer]) %></p>
<% form_tag :action => 'login' do %>
<%= hidden_field_tag('referer', h(params[:referer])) %>
<%= error_messages_for 'user' %>
<% form_tag :action => 'save' do %>
+<%= hidden_field_tag('referer', h(params[:referer])) unless params[:referer].nil? %>
<table id="loginForm">
<tr><td class="fieldName"><%= t 'user.new.email address' %></td><td><%= text_field('user', 'email',{:size => 50, :maxlength => 255, :tabindex => 1}) %></td></tr>
<tr><td class="fieldName"><%= t 'user.new.confirm email address' %></td><td><%= text_field('user', 'email_confirmation',{:size => 50, :maxlength => 255, :tabindex => 2}) %></td></tr>
# Submit the reset password token
# Check that the password has changed, and the user can login
end
+
+ def test_user_create_redirect
+ new_email = "redirect_tester@osm.org"
+ display_name = "redirect_tester"
+ password = "testtest"
+ # nothing special about this page, just need a protected page to redirect back to.
+ referer = "/traces/mine"
+ assert_difference('User.count') do
+ assert_difference('ActionMailer::Base.deliveries.size', 1) do
+ post_via_redirect "/user/save",
+ {:user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password}, :referer => referer }
+ end
+ end
+
+ # Check the e-mail
+ register_email = ActionMailer::Base.deliveries.first
+
+ assert_equal register_email.to[0], new_email
+ # Check that the confirm account url is correct
+ confirm_regex = Regexp.new("/user/confirm\\?confirm_string=([a-zA-Z0-9]*)")
+ assert_match(confirm_regex, register_email.body)
+ confirm_string = confirm_regex.match(register_email.body)[1]
+
+ # Check the page
+ assert_response :success
+ assert_template 'login'
+
+ ActionMailer::Base.deliveries.clear
+
+ # Go to the confirmation page
+ get 'user/confirm', { :confirm_string => confirm_string }
+ assert_response :success
+ assert_template 'user/confirm'
+
+ post 'user/confirm', { :confirm_string => confirm_string, :confirm_action => 'submit' }
+ assert_response :redirect
+ follow_redirect!
+ assert_response :success
+ assert_template "trace/mine"
+ end
end