gpt4 book ai didi

ruby-on-rails - 避免 current_user 每次都点击数据库? ruby on Rails

转载 作者:行者123 更新时间:2023-12-02 21:42:32 27 4
gpt4 key购买 nike

我正在关注Ruby on Rails Tutorial 。代码已给出,

在 session 助手中:

  def sign_in(user)
remember_token= User.new_remember_token
cookies.permanent[:remember_token]=remember_token #save the unencrypted token to browser cookies
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user= user
end

def current_user=(user)
@current_user= user
end

def current_user
encrypted_token=User.encrypt(cookies[:remember_token])
@current_user ||=User.find_by(remember_token:encrypted_token)
end

def sign_in?
!current_user.nil?
end

在导航器 View 中:

<% if sign_in? %>
<li><%= link_to "Profile",current_user %></li>
<% end %>

我的问题是:

  1. 每次访问者刷新导航器时是否都会访问数据库?
  2. 我可以通过在 View 中使用 @current_user 并将 sign_in? 函数更改为以下方式来减少数据库命中:
def sign_in?
if @current_user.nil?
!current_user.nil?
else
false
end
end

3.解决这个问题的最佳实践是什么?

提前致谢。

最佳答案

我认为你的解决方案很好,不需要修复。

我确实为您提供了两个建议/替代方案,如果您对当前情况不满意,您可能想要探索它们(但是,我不会推荐这些而不是您的解决方案,我只是要说明替代方案):

  1. 使用 session 而不是数据库。 HTTP 是无状态的。然而,session 的发明是为了让 http有状态的。您可以使用 session ,并存储对那里的当前用户。然后,您可以检查 session 中是否存在 user_id,而不是每次都访问数据库。这当然会降低您的安全性。您是否可以接受这取决于您申请的性质。
  2. 仅检查访问级别更改时的凭据。这是一种更实用/宽松的用户授权方法。 您是否认为这种安全性下降在您的情况下可以接受取决于您。它的工作原理如下:例如,我们有一个带有页面的简单网站。最低的访问级别是读取级别,如果用户决定编辑页面,他就会进入写入级别。在这种方法中,访问级别的更改将是您再次进行完整身份验证检查的那一刻。因此,并非每次都如此,只有当您更改访问级别时,才会重新验证并重新授权用户。也许您还想随机确定是否要重新验证/重新授权,这避免了可预测性。

关于ruby-on-rails - 避免 current_user 每次都点击数据库? ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20113677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com