Rails Devise自定义注册和登录页面存在的问题

8
在我的Ruby应用程序中,我正在使用“devise”宝石进行身份验证,但我想自定义视图,在自定义每个视图并将其保存在设备文件夹中作为局部文件后生成设备视图,因为我想在其他视图中呈现它们。所以我的问题是,“new/sessions”可以工作,但当我尝试注册时,似乎表单发布存在问题。 在此处查看登录表单
我阅读了很多关于如何在设备文档中自定义布局的内容,但我有点困惑如何实现使表单呈现在设备视图文件夹外部的方法。
1个回答

16

实际上,您的问题与此问题相同,但我会解释一下并尝试去做。

  1. 自定义注册 Devise。(自定义Devise)
  2. 在注册表单旁边创建一个自定义登录表单。(wiki)

步骤如下:

  1. 创建控制器以自定义注册,并从默认注册Devise继承

  2. # 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
    
  3. 创建控制器以自定义会话并从默认会话设备继承

  4. # customize session controller
    class SessionsController < Devise::SessionsController
      def create
        super
      end
    end
    
  5. 创建注册视图 app/registrations/new.html.erb

    将登录和注册表单放入 app/registrations/new.html.erb中。(除了注册表单,看起来像你的项目)

    <%= 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 %>
    
  6. 在应用程序助手中覆盖devise映射方法

  7. module ApplicationHelper
      def resource_name
        :user
      end
    
      def resource
        @resource ||= User.new
      end
    
      def devise_mapping
        @devise_mapping ||= Devise.mappings[:user]
      end
    end
    
  8. 自定义注册、认证和会话的路由

  9. 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
    

希望这能帮到您!


谢谢,我会尝试按照你说的方式实现它,看看效果如何。 - Obed Lorisson
这个功能非常好用,目前有时会被引导到注册页面(例如,如果我尝试使用错误的用户名进行注册,但这可能是“我的错”...)。 - Andy Hayden
1
@AndyHayden,如果您在猜测到错误的用户名时进行重定向,这将是一种安全漏洞。您将泄漏您拥有的正确用户名。请不要这样做! - quantumpotato
@quantumpotato 很正确,我认为那是一个错别字,我的意思是不正确的用户名和密码组合......我实际上不再使用 devise 了,但如果它重定向到注册而不是登录,那就不太好。:s - Andy Hayden
如果数据不正确,它将不会显示错误信息在自定义/您制作的页面上。 - vidur punj
@quantumpotato 如果您尝试使用现有用户名注册,那么用户名/电子邮件地址不是已经在类似的过程中泄漏了吗?也就是说,使用随机用户名进行注册并查看该名称是否已被使用? - MCB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接