Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails Devise Custom Registration and Login at the same page issues

In my Ruby app, I am using the 'devise' gem for authentication but I want to customize the views, generate the devise views after customizing each of them and saving them in the devise folder as a partial, because I want to render them in another views.

So my issues are, the new/sessions is working, but when I try to sign up, it seems there's an issue with the form posting. See login form here.

I read a lot about how to customize the layout in the devise documentation, but I am a little confused on how to implement to make the form render work outside the devise views folder.

like image 550
Obed Lorisson Avatar asked Jun 08 '13 14:06

Obed Lorisson


1 Answers

Actually, your question is the same as this question, but I'll explain a little bit and I'm try to do it.

  1. Customize registration devise. (customize devise)
  2. Make a custom login form beside on registration form. (wiki)

Step by step :

  1. Create controller for customize registration and inherit from default registration devise

    # customize registration controller
    class RegistrationsController < Devise::RegistrationsController
      layout 'login'
      skip_before_filter :require_no_authentication
      before_filter :resource_name
    
      def resource_name
        :user
      end
    
      def new  
        @user = User.new
      end
    
      def create
        @user = User.new(params[:user])
        # another stuff here
      end
    end
    
  2. Create controller for customize session and inherit from default session devise

    # customize session controller
    class SessionsController < Devise::SessionsController
      def create
        super
      end
    end
    
  3. Create registration views app/registrations/new.html.erb

    Put login and registration form into app/registrations/new.html.erb. (beside on registration form looks like your project)

    <%= form_for(resource, :as => resource_name, :url => user_session_path(resource_name)) do |f| %>
    <%# another stuff here %>  
    <% end %>
    
    <%= form_for(resource, :as => resource_name, :url => user_registration_path(resource_name)) do |f| %>
    <%# another stuff here %>
    <% end %>
    
  4. Override devise mapping method in application helper

    module ApplicationHelper
      def resource_name
        :user
      end
    
      def resource
        @resource ||= User.new
      end
    
      def devise_mapping
        @devise_mapping ||= Devise.mappings[:user]
      end
    end
    
  5. Route for customize registration devise and session

    devise_scope :user do
      # using login path for registration
      get '/login' => 'registrations#new', :as => :new_user_registration
      post '/signup' => 'registrations#create', :as => :user_registration
      post '/signin' => 'sessions#create', :as => :user_session
    end
    

Hope this help!

like image 137
rails_id Avatar answered Nov 18 '22 21:11

rails_id