Added referer URL in user_token so that redirections (e.g: from oauth token requests) are followed after the user has confirmed the sign-up. Added test for the same.
This commit is contained in:
parent
b108476b9e
commit
b34b898451
5 changed files with 58 additions and 3 deletions
|
@ -29,7 +29,7 @@ class UserController < ApplicationController
|
|||
|
||||
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'
|
||||
|
@ -198,10 +198,15 @@ class UserController < ApplicationController
|
|||
@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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<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])) %>
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
<%= 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>
|
||||
|
|
9
db/migrate/043_add_referer_to_user_token.rb
Normal file
9
db/migrate/043_add_referer_to_user_token.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
class AddRefererToUserToken < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_column :user_tokens, :referer, :text
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :user_tokens, :referer
|
||||
end
|
||||
end
|
|
@ -85,4 +85,44 @@ class UserCreationTest < ActionController::IntegrationTest
|
|||
# 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue