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



以下是我需要实现的目标:

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

我们能在Rails中做到这一点吗?如何做到?

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

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添加到数据库中,并在他们的电脑上创建一个cookie,下次访问时可以对其进行检查。

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

您可以使用上面的Conner-Stephen McCabe解决方案,也可以为此使用gem。用户可以很容易地清除cookie,所以它无论如何都不安全。

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

最新更新