我正在开发一个rails应用程序,可以创建一个可以放在网站上的小部件。当窗口小部件(在具有不同主机的网站上)显示给登录我的应用程序的用户时,我想向他显示一些其他管理选项。
确定用户是否已登录应用程序的最佳和最简单的方法是什么?
我在考虑在用户登录时存储IP,然后比较发送到窗口小部件控制器的请求中的IP。
答案 0 :(得分:2)
IP可能具有欺骗性。尝试使用cookies。
编辑:不仅是以一种积极欺骗的方式(即欺骗/ Tor),而是如果两个人在同一公共IP的不同站点上,那么你就会产生错误的相关性。
答案 1 :(得分:2)
我跟着Omniauth Railscast Episode并且一直在使用会话变量和SessionsController在用户登录和注销时创建和销毁会话。
class SessionsController < ApplicationController
def create
# create user if new user, or find user account if returning user.
session[:user_id] = user.id
redirect_to root_url # or wherever
end
def destroy
session[:user_id] = nil
redirect_to root_url # or wherever
end
end
然后在Application Controller中,
class ApplicationController < ActionController::Base
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
end
然后,您可以通过if current_user
轻松确定用户是否已登录,或者等同于session[:user_id]
是否为零。