检测用户是否在不同的域中登录

时间:2013-09-20 00:44:06

标签: ruby-on-rails ruby-on-rails-3

我正在开发一个rails应用程序,可以创建一个可以放在网站上的小部件。当窗口小部件(在具有不同主机的网站上)显示给登录我的应用程序的用户时,我想向他显示一些其他管理选项。

确定用户是否已登录应用程序的最佳和最简单的方法是什么?

我在考虑在用户登录时存储IP,然后比较发送到窗口小部件控制器的请求中的IP。

2 个答案:

答案 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]是否为零。