我正在尝试仅允许从我的计算机访问管理员用户的登录/注册页面,或者只允许我查看管理员单一登录的网页。
或者典型的网络应用程序如何限制对某个网页的公众访问?如果有一种投注方式,我想实现它。
我目前安装了Devise。
答案 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。
在您的情况下,可以有多个设置选项。
我希望你跟着设计路线。在控制器操作中检查当前用户的角色。
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_user
和number_of_wrong_attempt
的表格,并在他们尝试时存储他们的电子邮件未经许可进入该页面,然后在控制器中进行重定向。之后,您可以通过后台rake任务向他们发送电子邮件,该任务会检查某个错误的尝试阈值:&#34;嘿!您的注册被删除,因为您正在执行不受禁止的操作&# 34)