iOS NSURLRequests无法识别Rails应用程序会话

时间:2012-10-07 02:12:44

标签: ios ruby-on-rails ruby nsurlconnection nsurlrequest

我有一个带有单个控制器的简单rails应用程序。我有一个"过滤器"对于我的控制器的一些方法,我通过查看会话对象检查用户是否登录:

@user = User.where(:id => session[:user_id]) if session[:user_id]

在"登录"我的控制器的方法,我做:

session[:user_id] = user.id

非常平常的东西。如果我从网络浏览器(Chrome)访问我的应用程序,一切正常。但是,当我从iOS应用程序使用NSURLRequest访问我的rails应用程序时,服务器总是为每个请求创建一个新会话。它似乎永远无法识别现有会话,即使请求正在发送带有适当会话ID的cookie。事实上,如果我看看" cookies"我的rails应用程序中的对象,我可以看到它包含会话ID。但是,会话对象始终为空!不确定服务器无法检索会话的原因。我正在使用Passenger Phusion。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您POST登录到您的登录页面,并且帖子中没有包含与会话中的令牌匹配的CSRF令牌,则Rails将使请求失败并作为安全预防措施使会话无效/重置。

要修复它,只需从会话中读取CSRF令牌并将其包含在您的请求中,或关闭CSRF令牌检查,您可以将skip_before_filter :verify_authenticity_token放在控制器中以跳过CSRF保护检查。请注意,后一种方法确实会打开潜在的安全漏洞,因此如果它完全可行,建议包括令牌并检查它们。