在Rails中,我们可以在用户访问时自动向控制器提交数据并重新加载视图吗?

时间:2013-11-27 13:22:03

标签: ruby-on-rails ruby ruby-on-rails-4

这就是我需要实现的目标:

用户访问登录页面。第一次访问时,浏览器将从cookie(cookies [:user])记录他的IP和数据并将其发送到服务器。然后服务器检查IP或用户是否在阻止列表中,如果用户在阻止列表中,它将自动将使用重定向到阻止的页面!

我们可以在Rails中做到这一点吗?

3 个答案:

答案 0 :(得分:1)

这可以很容易地完成,例如

def new
    if cookies[:userid].present?
        if User.find(cookies[:userid]).userblocked == true
            redirect_to "/block_page"
        end
    elsif @failedtries == max_tries
        User.find(cookies[:userid]).userblocked = true
        cookies[:userid] = @id_entered
    end
end

其中'userblocked'是数据库中的true或false值。这种方法可以完全证明可以自由更改IP的人。但是,如果你的心脏被设置为使用IP,那么这是一个例子:

def new
    if cookies[:blocked].present?
        redirect_to "/block_page"
    else
        if BlockedIps.find_by_ip(request.remote_ip).blocked == true
            redirect_to "/block_page"
        elsif @failedtries == max_tries
            BlockedIps.find_by_ip(request.remote_ip).blocked = true
            cookies[:blocked] = true
        end
    end
end

这样的事情可能就是你所追求的。试一试,我还没有测试过代码。现在这只是我的想法,但它应该做你想要的,只要你有一些系统来在达到最大尝试时将IP存储在数据库中。

说明: 它的工作方式是检查阻塞的cookie是否存在,如果是,它会重定向到阻止页面,如果不是,它会检查用户的IP地址是否在IP阻止列表中。如果IP存在且块列设置为true,则用户将被重定向到阻止页面,否则系统将检查他们进行了多少尝试,如果等于最大尝试次数,则将用户IP添加到数据库并在他们的PC上创建一个cookie,可以在下次访问时进行检查。

答案 1 :(得分:0)

您可以创建一种方法来检查IP地址并进行身份验证,然后在控制器上使用before_action:yourmethod。 before_action在控制器中的任何其他操作之前运行,因此在显示任何视图之前进行身份验证是一种好方法。

答案 2 :(得分:0)

您可以使用上面的Conner Stephen McCabe解决方案或为此目的使用宝石。 用户可以轻松清除cookie,因此无论如何都不安全。

示例:https://github.com/kickstarter/rack-attack