Rails Devise Custom Registration and Login at the same page issues

后端 未结 1 2117
梦如初夏
梦如初夏 2020-12-29 14:29

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

相关标签:
1条回答
  • 2020-12-29 15:16

    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!

    0 讨论(0)
提交回复
热议问题