首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails & Turbo/Hotwire:防止用户直接访问视图

Rails & Turbo/Hotwire:防止用户直接访问视图
EN

Stack Overflow用户
提问于 2021-12-24 19:23:27
回答 2查看 212关注 0票数 1

在常规的Rails 7应用程序中,如果您构建了一个列出Tweets的#index操作,并且希望用户能够内联地编辑这些tweet,您可以这样做:

代码语言:javascript
复制
# _tweet.html.erb
<%= turbo_frame_tag(tweet) do %>
  <%= tweet.text %>
  <%= link_to "Edit this tweet", edit_tweet_path(tweet) %>
<% end %>

然后在tweets/edit.html.erb

代码语言:javascript
复制
<%= turbo_frame_tag(tweet) do %>
  <%= render "form", tweet: @tweet %>
<% end %>

即使它很难工作,我也想阻止用户直接点击URL /tweets/1/编辑,这样edit.html.erb就只能通过Turbo请求访问。

但是,这些编辑请求(不是turbo_stream表单提交)实际上只是一个常规的Processing by TweetsController#edit as HTML请求(它在控制台中打印Processing by TweetsController#edit as HTML),因此这样做:

代码语言:javascript
复制
def edit
  respond_to {|format| format.turbo_stream }
end

我不能阻止用户直接访问/tweets/1/编辑,因为它不是涡轮流。

在Rails UJS的好日子里,可以很容易地通过限制控制器响应format.js来实现这一点,如下所示:

代码语言:javascript
复制
def edit
  respond_to {|format| format.js }
end

或者只在视图文件夹中提供一个edit.js.erb文件,因为如果用户直接请求/tweets/1/edit` `(因为它将是一个HTML ),则不会处理HTML请求。

有没有办法用Hotwire & Turbo实现同样的目标?

EN

回答 2

Stack Overflow用户

发布于 2022-03-17 12:58:35

首先,我想问你为什么要限制这一点?turbo的精神,特别是框架和驱动器,是您的应用程序将逐步增强从完整的页面交互(常规的http请求),一直到微交互,如您提到的。您所描述的问题只有在用户使用cmd/ctrl + click打开编辑链接时才会出现。你真的测量过多少人这样做了吗?在一个新的标签里打开它?测量它可能会让你知道限制它是多么的重要。

现在,谈谈你问题的具体内容。

目前(2022年3月)还没有检测到turbo帧请求并对其做出不同响应的方法。您可以跟踪这个问题,并在那里得到一些答案:https://github.com/hotwired/turbo-rails/issues/229

不过,我的直觉是,你想要做的事情与实际情况是背道而驰的,这可能是一种不需要的优化。

票数 0
EN

Stack Overflow用户

发布于 2022-11-19 22:24:13

您可以检查turbo在获取帧内容时提供的turbo帧报头。我正在寻找一种方法来确定这一点,这样我就不必为通过src属性加载到框架中的内容创建一个单独的控制器和视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70476005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档