设计会话限制问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计会话限制问题相关的知识,希望对你有一定的参考价值。

参考文章:devise limit one session per user at a time

我已经设置了我的Rails应用程序,如下所示:

的routes.rb

devise_for :users, :controllers => { :sessions => "my_sessions" }

应用控制器:

  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

my_sessions控制器:

class MySessionsController < Devise::SessionsController
  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
end

当我连接并重新启动我的Rails服务器时,它加载正常。但是,当尝试登录时,它会快速恢复到登录屏幕。根据我的开发日志,我可以看到它击中MySessions控制器:

Started GET "/users/sign_in" for 127.0.0.1 at 2012-08-30 10:51:24 -0500
Processing by MySessionsController#new as html
  Rendered devise/sessions/new.html.erb within layouts/application (1.4ms)
Completed 200 OK in 16ms (Views: 15.8ms | ActiveRecord: 0.0ms)

设计/会话/新

<h2>Secure Login</h2>


<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
  <div><%= f.label :login %>
  <%= f.text_field :login, :placeholder => 'Username or Email' %></div><br />

  <div><%= f.label :password %>
  <%= f.password_field :password, :placeholder => '••••••••' %></div><br />

  <div><%= f.submit "Login", :class => 'btn btn-inverse' %></div>
<% end %>

即使它击中了覆盖控制器,它也没有做任何事情。我已经跟着这篇文章发了帖,它适用于另一个用户。任何人都可以查看我的代码,看看我做错了什么。

我真的很喜欢会话限制因为我的应用依赖它。我已经尝试过使用Devise Security Extension,但在按照说明操作后继续获取未定义的方法“unique_session_id”,所以我想我会尝试这样做。

先谢谢你们!

答案

惯于

current_user && !(session[:token] == current_user.login_token)

如果您已登录,则始终如此?

这将解释重定向,因为当您重新登录时,您已登录,因此您需要登录,重复。

以上是关于设计会话限制问题的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 表单验证问题(会话大小限制?)

php检索会话变量以限制对页面的访问[重复]

text 会话片段Logan

添加片段时的 FlyOut 菜单设计问题

没有 cookie 的安全会话管理

是否有在单个活动中处理多个片段的 Android 设计模式?