我的目标很简单。我只允许用户拥有唯一的密码才能注册。我想检查此代码是否有效(位于我的密码数据库中),然后在用户注册后将其删除。
我有一个带有以下代码的secret_code模型:
:secret_code column
我在注册表格中输入了密码
<%= f.input :secret_code, required: true, autofocus: true %>
我应该个性化class RegistrationsController < Devise::RegistrationsController
吗?
如何?谢谢!
答案 0 :(得分:2)
您可以通过重写registrationcontroller来做到这一点。取消注释这样的创建方法。
def create
super
end
并添加一个类似的过滤器:
before_action :check_secret_code, only: [:create]
,并且您必须修改路线以告知设计者使用控制器而不是默认控制器:
devise_for :users, controllers: { registrations: "users/registrations" }
您可以在该check_secret_code
方法中指定所需内容,如果代码错误,则输入render 'new'
。希望对您有所帮助。
答案 1 :(得分:0)
您可以使用简单的before filter
来实现。这样,您就不必弄乱设计代码。
class RegistrationsController < Devise::RegistrationsController
before_filter :check_conditions, only: :create
def create
super
end
private
def check_conditions
#your conditions
end
end
答案 2 :(得分:0)
解决了!除了@Mehmet答案外,我还必须将message_list
application_helper.rb
然后将module ApplicationHelper
def resource_name
:user
end
def resource
@user ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
end
放入include ApplicationHelper after the class name