【发布时间】:2011-10-27 11:44:55
【问题描述】:
我的应用正在使用 Rails 3.0.4 和 Devise 1.1.7。
我正在寻找一种方法来阻止用户共享帐户,因为该应用是基于订阅的服务。我一直在寻找一个多星期,但我仍然不知道如何实施解决方案。我希望有人已经实施了解决方案,并可以为我指明正确的方向。
解决方案(感谢大家的回答和见解!)
在应用程序controller.rb中
before_filter :check_concurrent_session
def check_concurrent_session
if is_already_logged_in?
sign_out_and_redirect(current_user)
end
end
def is_already_logged_in?
current_user && !(session[:token] == current_user.login_token)
end
在覆盖设计会话控制器的 session_controller 中:
skip_before_filter :check_concurrent_session
def create
super
set_login_token
end
private
def set_login_token
token = Devise.friendly_token
session[:token] = token
current_user.login_token = token
current_user.save
end
迁移中的 AddLoginTokenToUsers
def self.up
change_table "users" do |t|
t.string "login_token"
end
end
def self.down
change_table "users" do |t|
t.remove "login_token"
end
end
【问题讨论】:
-
这在开发和登台上效果很好,但在生产上它让我的登录过程总是导致立即退出。我总是在登录后将用户重定向到他们在上一次会话期间所在的最后一页。有任何想法吗?奇怪的是,我的暂存环境和生产环境是相同的 Heroku rails 3.2/PostgreSQL 堆栈!
标签: ruby-on-rails ruby-on-rails-3 session devise