Max*_*Max 5 ruby-on-rails devise
我正在构建一个应用程序,我想为给定用户添加在线状态.
我知道Devise有一个方法user_signed_in?内置以检查使用该应用程序的用户是否已登录.但是当我尝试将它用于不同的用户时:
user_signed_in?(user)
user.user_signed_in?
Run Code Online (Sandbox Code Playgroud)
我显然得到一个未定义的方法错误.
Devise有这个方法还是我必须自己编写?一种方法是将给定用户的在线状态存储在用户模型中.什么是最好的解决方案?
小智 18
我在我的应用程序上使用了Devise,并在我第一次使用它时遇到了一些与你相同的问题.您只是错误地使用辅助方法.如果您想检查当前用户是否有会话并且已登录,则使用帮助程序:
if user_signed_in?
Run Code Online (Sandbox Code Playgroud)
这基本上与以下内容相同:
if !current_user.nil? && current_user.signed_in
Run Code Online (Sandbox Code Playgroud)
如果您想检查用户对象是否已登录,则调用此方法:(其中user是用户模型对象)
if user.signed_in?
Run Code Online (Sandbox Code Playgroud)
我不是 Devise 的作者,但据我所知,Warden / Devise 都不跟踪谁登录。
User 表中存在 is_online 列的问题是很难查看谁在网站上处于活动状态。我会在您的用户模型中添加一个名为“last_seen”的列作为日期时间,并在每次用户请求页面时使用 Devise 更新该列。然后,您可以轻松添加 User.online_count 方法,或者还可以查看过去 5 分钟内是否在网站上看到过某个用户。