When a user has a failed registration attempt, my app is redirecting them to the root url instead of rendering the registration page.
Routes:
resources :users
devise_for :users, path: '', path_names: { sign_up: 'register', sign_in: 'login', sign_out: 'logout'}, :controllers => { :omniauth_callbacks => "callbacks" }
registrations#new:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), :html => {:class => "col s12 form-text", autocomplete: "off"}) do |f| %>
<%# render 'devise/errors', resource: resource %>
<div class="row">
<div class="input-field col s12">
<%= f.text_field :full_name, :class => "validate", :required => true, :placeholder => "Robin Smith" %>
<%# f.label :full_name, :class => "allcaps active", :data => {:error => 'Name Required'} %>
<%= f.label :full_name, :class => "allcaps" %>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<%= f.email_field :email, :class => "validate", :required => true, placeholder: " " %>
<%= f.label :email, :class => "allcaps" %>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<%= f.password_field :password, :class => "validate", :required => true, placeholder: " " %>
<%= f.label :password, "password (min 6 chars)", :class => "allcaps" %>
</div>
</div>
<div class="button-container">
<button class="waves-effect btn-flat btn-large"type="submit" name="action">Join Now</button>
</div>
<% end %>
I can go to mydomain.com/register and the form appears. But when there's a failed registration attempt, they're redirected to the root url instead of re-rendering the register page with errors.
I feel like there must be something wrong in my routes. Any idea?
You can override the Devise create action and redirect to your url:
# registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def create
build_resource(sign_up_params)
resource.save
yield resource if block_given?
if resource.persisted?
if resource.active_for_authentication?
set_flash_message! :notice, :signed_up
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}"
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
set_minimum_password_length
resource.errors.full_messages.each {|x| flash[x] = x}
#redirect_to your_path
end
end
end
And in routes:
resources :users
devise_for :users, path: '', path_names: { sign_up: 'register', sign_in: 'login', sign_out: 'logout'}, :controllers => { :registrations => "registrations", :omniauth_callbacks => "callbacks" }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With