Account not validated error on login and resend email support

pull/4138/head
Juan Ignacio Sánchez Lara 9 years ago
parent 0e6ce8bfa6
commit 72918f53ce

@ -18,4 +18,15 @@ class AccountTokensController < ApplicationController
render 'signup/account_enabled'
end
def resend
user_id = params[:user_id]
render_404 and return unless user_id
@user = User.where(id: user_id).first
render_404 and return unless @user
@user.notify_new_organization_user
render 'signup/resend'
end
end

@ -70,6 +70,12 @@ class SessionsController < ApplicationController
end
end
def account_token_authentication_error
@user = User.where(id: warden.env['warden.options'][:user_id]).first
flash.now[:error] = "You need to validate your account by clicking the button we sent you to the email address #{@user.email}."
render 'account_token_authentication_error'
end
protected
def initialize_google_plus_config

@ -0,0 +1,3 @@
<%= render :partial => 'shared/flash_message' %>
Didn't you receive the email? <a href="<%= CartoDB.url(self, 'resend_validation_mail', :user_id => @user.id) %>">Click here to send it again</a>.

@ -0,0 +1 @@
A new validation mail has been sent to <%= @user.email %>.

@ -17,9 +17,15 @@ end
Warden::Strategies.add(:password) do
def authenticate!
if params[:email] && params[:password]
if (user = User.authenticate(params[:email], params[:password])) && user.enabled?
success!(user, :message => "Success")
request.flash['logged'] = true
if (user = User.authenticate(params[:email], params[:password]))
if user.enabled?
success!(user, :message => "Success")
request.flash['logged'] = true
elsif !user.enable_account_token.nil?
throw(:warden, :action => 'account_token_authentication_error', :user_id => user.id)
else
fail!
end
else
fail!
end

@ -15,6 +15,7 @@ CartoDB::Application.routes.draw do
post '(/user/:user_domain)(/u/:user_domain)/signup' => 'signup#create', as: :signup_organization_user
get '(/user/:user_domain)(/u/:user_domain)/enable_account_token/:id' => 'account_tokens#enable', as: :enable_account_token_show
get '(/user/:user_domain)(/u/:user_domain)/resend_validation_mail/:user_id' => 'account_tokens#resend', as: :resend_validation_mail
get '(/user/:user_domain)(/u/:user_domain)/login' => 'sessions#new', as: :login
get '(/user/:user_domain)(/u/:user_domain)/logout' => 'sessions#destroy', as: :logout

@ -33,6 +33,34 @@ describe AccountTokensController do
end
describe 'resend validation mail' do
it 'returns 404 for nonexisting users' do
get resend_validation_mail_url(user_id: UUIDTools::UUID.timestamp_create.to_s)
response.status.should == 404
end
describe 'valid user behaviour' do
before(:each) do
User.any_instance.stubs(:enable_remote_db_user).returns(true)
@user = FactoryGirl.create(:valid_user)
end
after(:each) do
@user.destroy
end
it 'triggers a NewOrganizationUser job with user_id' do
::Resque.expects(:enqueue).with(::Resque::UserJobs::Mail::NewOrganizationUser, @user.id).returns(true)
get resend_validation_mail_url(user_id: @user.id)
response.status.should == 200
end
end
end
end
end

Loading…
Cancel
Save