要创建Honey pots字段,我在User
模型中添加了一个虚拟属性,如果填入该属性,则会将用户发送回根页面:
class User < ActiveRecord::Base
attr_accessible :email, :password, :remember_me, :username, :fake_field
attr_accessor :fake_field
devise :database_authenticatable, :registerable............
before_create :setup_default_role_for_new_users
ROLES = %w[admin default banned]
def self.fake_field(string)
end
private
def setup_default_role_for_new_users
if self.fake_field.present?
redirect_to root_url
end
if self.role.blank?
self.role = "default"
end
end
end
该表单适用于注册,但填写fake_field
时我会收到:
undefined local variable or method `root_url' for #<User:0x5a06618>
这可以吗?这不会为机器人渲染404吗?
理想情况下,我想让机器人登陆404错误页面。
答案 0 :(得分:6)
我同意MasterBlaster,这是控制器的任务。您在模型中也不需要fake_field
属性。
如果您想在表单上创建蜜罐,只需添加
即可 <%= text_field_tag :email_confirmation, :style => "display: none" %>
到那个表格。
然后在控制器的方法中添加此项,以便检查机器人是否正在尝试输入:
class UsersController < ApplicationController
def create
render :status => 200 and return unless params[:email_confirmation].blank?
# (your code)
# ...
end
end
我还建议你将蜜罐字段重命名为更聪明的东西(例如“电子邮件确认”),因为机器人在寻找“虚假”字段方面往往非常聪明。
修改强>
您也不需要通知机器人他的行为不成功,也没有必要礼貌。回复一个不错的200 (OK)
。我已相应更新了我的帖子。
答案 1 :(得分:0)
您不应该在模型中重定向。此检查应在控制器中完成。 您可以在控制器中使用before_filter,并使用其中的方法进行检查和重定向。
您无法访问模型中的此辅助方法root_url
。无论如何,这是错误的做法。