Tag: session

Rails中的会话,子域和authlogic问题

我有一个带有authlogic身份validation的rails应用程序和一个用subdomain-fu构建的username.domain.com结构。 但是当我从domain.com转到username.domain.com时,我的会话中断了。 我试过补充一下 config.action_controller.session = {:domain => ‘.localhost:3000’} 到我的development.rb,但接缝打破authlogic禁用注销/登录。 关于该怎么做的任何建议? 提前致谢!

优雅地处理Rails 4中的InvalidAuthenticityTokenexception

我刚刚将一个应用程序从Rails 3升级到Rails 4,我看到一堆InvalidAuthenticityTokenexception弹出。 挖掘它看起来我们的用户在我们的网站上打开多个长期标签是相当普遍的。 所以我认为发生的事情是这样的:用户Alice打开了三个标签,她的会话过期了。 她重新登录其中一个选项卡,这会更新存储在其会话中的真实性令牌。 然后她返回到其他一个打开的选项卡并尝试提交数据,但她从我们引发的InvalidAuthenticityToken错误中得到500错误。 为Alice做一些error handling显然很好,所以她没有得到500错误。 我想知道这种情况的最佳做法。 从过期的标签处理Alice的提交有什么好方法? 我不想让当前会话到期,因为从用户的角度来看这会非常烦人(“我刚刚登录,你笨蛋!”)。 理想情况下,我只是希望用户重新加载页面,这将导致表单中存在正确的真实性令牌。 或者我应该做一些不同的事情,以便打开的长期标签注意到会话已经过期并强制重新加载? 从用户的角度来看,这可能是次优的,因为他们喜欢准备好该页面并且易于访问以便继续引用,这就是为什么他们首先在选项卡中将其打开。

Rails与activerecord共享会话

我目前正在使用默认cookie作为我的单点登录(SSO),但是一些用户在推送更新后出现了奇怪的错误。 我正在考虑转移到活动记录来存储会话但是我想知道我如何告诉rails会话在另一个数据库中? 因此,如果我通过AR在App1DB中存储会话,那么所有其他应用程序如何知道在哪里查找会话?

加载会话的力度如何?

我正在开发一个需要使用会话ID信息的应用程序。 我的会话存储在cookie中。 我遇到的问题是,当用户第一次访问该站点时,我的会话无法立即供控制器使用。 我想我可能会遗漏一些关于如何在Rails中初始化会话的内容。 但我认为会话未加载的事实因为这是session.inspect的输出: # 以下是如何使用Rails 3.2.11和ruby 1.9.3重现问题: 使用test控制器创建新应用程序: rails new my_app cd my_app/ rails g controller test rm app/assets/javascripts/test.js.coffee touch app/views/test/index.html.erb 尝试获取该控制器中的会话ID: class TestController < ApplicationController def index puts session[:session_id] puts session.inspect end end 添加所需的路线: MyApp::Application.routes.draw do resources :test end 然后访问应用程序并查看它的作用: rails server 得到: http://localhost:3000/test 这是控制台中的输出: # 然后再次http://localhost:3000/test ,这次我们有一个会话: 400706c0b3d95a5a1e56521e455075ac {“session_id”=>”400706c0b3d95a5a1e56521e455075ac”, “_csrf_token”=>”Euaign8Ptpj/o/8/ucBFMgxGtiH7goKxkxeGctumyGQ=”}

单页应用程序和CSRF令牌

我需要使用单页应用程序(React,Ember,Angular,我不关心)和Rails CSRF保护机制。 我想知道是否需要在ApplicationController创建令牌evey时间,如下所示: class ApplicationController < ActionController::Base after_action :set_csrf_cookie def set_csrf_cookie cookies["X-CSRF-Token"] = form_authenticity_token end end 或者我可以只创建一次令牌 。 每会话或每(非GET)请求? 我认为令牌在会话有效之前仍然有效,对吧? 澄清 : 每当我浏览页面时,我都会看到Rails默认应用程序(服务器呈现页面)更新csrf-token。 所以每次都改变。 因此,在我的情况下,如果我为每个after_action创建一个新令牌,那么之前的CSRF令牌仍然适合该会话。 那么,如何使前一个令牌无效? 我必须? 因为只有我无效才有意义,对吧?

在Ruby on Rails 3.2中使用Mongo DB会话存储时如何清除旧/陈旧会话

我inheritance的Ruby on Rails应用程序运行良好,但使用MongoDB进行会话存储。 会话收集表尚未在2年多的时间内被清除(!!!),这意味着它有超过200万个条目,占用大约4GB(!!!)的空间。 对于数据库而言,这并不是一件好事,也不是必需的,并且是一个令人难以置信的误用空间 – 整体而言 – 远小于4GB。 所以调查如何清理这些东西我在各种网站上发现了很多post – Stack Overflow和其他 – 解释了一般过程: 使用Rails中的rake任务清理会话数据库存储 清除Rails会话 如何清除rails会话表 Rails:清除存储在数据库中的旧会话 这是有道理的:创建一个连接到sessions的rake任务,并根据updated_at条件删除条目。 都好! 我的问题是这个Ruby on Rails应用程序使用MongoDB和Mongoid,所以这些页面上提供的示例实际上都没有用。 所以像这样的东西不起作用: namespace :sessions do desc “Clear expired sessions (more than 7 days old)” task :cleanup => :environment do ActiveRecord::SessionStore::Session.delete_all([“updated_at < ?", 7.days.ago]) end end 该应用程序不使用ActiveRecord,因此没有骰子。 rake任务因ActiveRecord不存在而死亡,如果包含ActiveRecord则死亡,因为核心DB逻辑不依赖于ActiveRecord模型; 这都是Mongoid。 还使用所谓的烘焙rake db:sessions:clear一些人推荐似乎没有工作,我相信连接到不使用ActiveRecord的应用程序,因此该任务甚至不存在。 我如何能够使用Rails 3中的Mongoid创建一个等效查询来清除数据库会话存储中的死,旧和陈旧会话?

切换到新域名时保持用户会话(Ruby on Rails)

我的Rails应用程序目前在example.org上可用,但我想切换到example.com 在routes.rb执行通配符301重定向不是问题,但我也想保留用户会话 。 由于新域名无法访问旧域名的cookie,因此将用户重定向到新域名仍然有他/她登录的最佳(安全且尽可能简单)方法是什么? 我发现很multithreading都在谈论使用复杂的身份validation令牌方法设置跨域Web应用程序,但我正在寻找一次性单向迁移,所以我希望解决方案对此更简单。 有什么建议? 我正在使用Ruby on Rails 3,OmniAuth,并使用默认的’cookie_store’作为我的会话存储。

如何将数组分解为字符串MVC?

如果current_user提交了一个习惯,那么他:committed这样做的日子就是这样: db t.text “committed”, default: [“sun”, “mon”, “tue”, “wed”, “thu”, “fri”, “sat”], array: true 习惯/ _form (用户选择天数) habit_controller habit_params :committed => [] 习惯/指数 如果一个nil用户提交了一个习惯(鼓励他在注册前创建一个习惯),那么他:committed这样做的日子是这样的: db t.text “committed”, default: [“sun”, “mon”, “tue”, “wed”, “thu”, “fri”, “sat”], array: true 习惯/ _form (用户选择天数) * habit_controller session[:habit_committed] = [params[“habit”][“committed”]] * users_controller committed = session.delete(:habit_committed) @user.habits.create(committed: committed) 习惯/指数 当两个习惯首次提交时,终端看起来像这样: Started […]

Sinatra使用Facebook身份validation的会话

我对ruby和Sinatra很新,我有一个基本问题: 我正在尝试构建的应用程序将使用Facebook作为在应用程序中validation用户身份的唯一方法。 我想存储一个本地用户表,其中只包含facebook uid以及一些用户首选项。 我看了几个允许我对facebook API进行身份validation的gem,但是我不确定在我建立用户之后如何在我的应用程序中控制会话是有效的。 我一直在使用考拉gem与facebook交谈,我也看到过sinatra-sessiongem用于运行会话方面的事情。 一旦用户使用他们的Facebook帐户登录,有人能指出我如何管理会话的正确方向吗?

无法找到路径“/ sessions / user”的设计映射设计错误

最近几天非常令人沮丧。 我有一个安装了Devise的rails应用程序,我生成了一个新的User模型,我也生成了Devise视图。 当我在填写电子邮件和密码字段后单击“登录”时尝试以现有用户身份登录时会发生这种情况: AbstractController::ActionNotFound – Could not find devise mapping for path “/sessions/user”. This may happen for two reasons: 1) You forgot to wrap your route inside the scope block. For example: devise_scope :user do get “/some/route” => “some_devise_controller” end 2) You are testing a Devise controller bypassing the router. If so, you can explicitly […]