【发布时间】:2014-09-05 12:59:36
【问题描述】:
我正在使用带 Rails 3.0.20 的 Devise-1.5.4。
Devise 提供了诸如current_user、authenticate_user! 等方法,它们调用authenticate!,它本身调用serialize_from_cookie,使用remember_token 对用户进行身份验证。
另外,serialize_from_cookie 方法接收id 作为参数,因此它在主键上查询Users 表(这会自动成为优化查询)。
但是,我在 MySQL 日志中看到类似 select * from users where remember_token = 'XXXXXX' 的查询。
由于 users 表变得很大,这些查询变得越来越慢。我对此有以下疑问:
- 我无法调试 Devise 在哪里(在代码中)进行此类查询?
- 如何优化这些查询(除了添加索引)?
【问题讨论】:
-
您的用户表有多大?你也试过
bundle open devise并在 gem 中扔调试器来玩它吗? -
记住用户实际上应该是一个罕见的动作。这样的查询有多慢?
-
这仍然是您的问题吗(即在提供此答案后:stackoverflow.com/questions/25686247/…)?
-
@D-side - 为什么这是一个罕见的动作? IMO,几乎每个人都记得我。此外,查询大约需要 6-8 秒。
-
@brahmana - 是的。根据stackoverflow.com/a/25687145/2036529,我了解 Devise 使用多种策略来验证用户身份。但是,正如这个问题中提到的,还有一个
id参数可以通过优化查询根据remember_token查找用户。仅基于remember_token搜索用户是我找不到的(在代码中也是如此)。需要这方面的帮助。
标签: ruby-on-rails ruby ruby-on-rails-3 devise