Rails设计 – current_user是零
出于某种原因, current_user
在我的nil
模型控制器( Subscriptions
)中返回nil
。 我没有在互联网上找到任何certificate这种行为的理由……
class SubscriptionsController < ApplicationController def new ... end def create current_user # returns nil end end
我有一个csrf元标记:
我可以提供更多代码,但我不确定什么是有用的。
UPDATE
所以感谢评论/答案,我已经将问题指向了一个特定的行动: create
。
如果我将@user = current_user
添加到new
,我可以在我的new
视图中显示当前用户的电子邮件。 但是,在我的create
controller中, current_user
返回nil
。
我通过表单(提交)访问了create
操作。
在提交表单之前,我validation输入,然后向Stripe发送请求以从表单中获取令牌。 如果没有错误(validation和条带),我然后发送表单。
这可能是原因吗?
更新2
在我的错误消息中,我的会话转储是空的 ,而它应该包含current_user信息…
事实certificate我正在制作的AJAX请求没有携带CSRF令牌。 出于这个原因,Rails杀了我的会话。
我在我的SubscriptionsController
添加了skip_before_filter :verify_authenticity_token
,它现在正在运行。 它可能不是最安全的解决方案,但它现在有效,所以我继续开发并稍后再回到这个问题。
current_user
工作,您需要添加before_filter :authenticate_user!
到你的class级,比如:
class SubscriptionsController < ApplicationController before_filter :authenticate_user! def new ... end def create curent_user # returns nil end end
和authenticate_user!
方法将为您设置当前用户:)
请注意,使用form_tag
帮助程序创建表单时,它们不会自动生成包含CSRF身份validation令牌的隐藏字段。 我使用我有时喜欢使用的form_tag
构建的表单遇到了同样的问题。
我通过在表单中包含以下帮助程序来解决此问题:
<%= hidden_field_tag 'authenticity_token', form_authenticity_token %>
它基本上是一种手动方式,可以生成CSRF所需的隐藏字段。