gpt4 book ai didi

ruby-on-rails - 避免 current_user 每次都访问数据库? Rails 上的 Ruby

转载 作者:行者123 更新时间:2023-12-02 04:44:21 24 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? 函数更改为:
  3. 来减少数据库命中率吗?
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 每次都访问数据库? Rails 上的 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20113677/

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