Lea*_*RoR 1 ruby-on-rails devise ruby-on-rails-3
为了创建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
Run Code Online (Sandbox Code Playgroud)
该表单适用于注册,但填写时fake_field我得到:
undefined local variable or method `root_url' for #<User:0x5a06618>
Run Code Online (Sandbox Code Playgroud)
这个可以吗?这不会为机器人渲染404吗?
理想情况下,我想让机器人登陆404错误页面.
我同意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
Run Code Online (Sandbox Code Playgroud)
我还建议你将蜜罐字段重命名为更聪明的东西(例如"电子邮件确认"),因为机器人在找到"假"字段时往往非常聪明.
编辑
你也不需要告知机器人他的行动是不成功的,没有必要礼貌.回应一个不错的200 (OK).我已相应更新我的帖子.
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |