你如何限制对某个网页的访问?

时间:2017-07-16 02:16:58

标签: ruby-on-rails ruby

我正在尝试仅允许从我的计算机访问管理员用户的登录/注册页面,或者只允许我查看管理员单一登录的网页。

或者典型的网络应用程序如何限制对某个网页的公众访问?如果有一种投注方式,我想实现它。

我目前安装了Devise。

2 个答案:

答案 0 :(得分:3)

您可以使用authenticate_user! Devise助手,将其作为回调添加到所需的控制器中,并指定您要控制的方法。

例如,如果您有Post模型,那么在authenticate_user!中添加PostController它将要求用户登录以访问该特定控制器中的方法:

class PostsController < ApplicationController
   before_action :authenticate_user!

如果您只想限制某些特定方法,则可以使用only和/或except

  

请参阅:Devise将创建一些在控制器内使用的帮助程序   和意见。要使用用户身份验证设置控制器,只需添加   这个before_action(假设你的设计模型是'用户')

Devise - Controller filters and helpers

根据您的评论,您可以在ApplicationController中创建一个方法,以限制所有控制器和方法。

通过这种方式,您可以定义一个地址数组,如果来自remote_ip的{​​{1}}在数组中,那么您可以提供访问权限,如果不是则执行任何其他操作:

request

但如果您需要更复杂的东西,那么无论您使用什么来部署项目,都必须在Nginx或Apache上看到。

答案 1 :(得分:1)

我通常通过控制器方法限制网页访问。我最近的用例仅在付款成功时转到网页,但在不是重定向时,如果有任何机构直接为该页面发出get request,则会产生404。

在您的情况下,可以有多个设置选项。

  1. 您可以使用Cookie通过Action Dispatcher
  2. 查看用户凭据
  3. 为用户使用Devise,然后您可以通过添加新迁移并在注册后自行分配角色或让他们选择来为用户修复某个角色。
  4. 我希望你跟着设计路线。在控制器操作中检查当前用户的角色。

    If User Not signed in (using current_user == nil)
      redirect to home page and then return
    
    else
      if 
        its admin you go ahead and use the success page as partial and let them see the page using `<%= render 'pages/mypage'%>` and use return to end
      else 
        just redirect back to home page with a notice "Don't try this". 
        redirect_to root_path, notice: 'Don't try this' and then use 
        return to end
    end
    

    (只是为了好玩,看看用户执行此错误操作的次数,您还可以拥有一个存储current_usernumber_of_wrong_attempt的表格,并在他们尝试时存储他们的电子邮件未经许可进入该页面,然后在控制器中进行重定向。之后,您可以通过后台rake任务向他们发送电子邮件,该任务会检查某个错误的尝试阈值:&#34;嘿!您的注册被删除,因为您正在执行不受禁止的操作&# 34)