Rails引擎中的ActionController :: InvalidAuthenticityToken

时间:2014-11-13 13:59:21

标签: ruby-on-rails authenticity-token protect-from-forgery

我正在使用rails构建一个saas引擎。我在帐户#create方法(使用warden gem)中遇到以下错误:

ActionController::InvalidAuthenticityToken in Subscribem::AccountsController#create
ActionController::InvalidAuthenticityToken

Rails.root: /home/jma/Documents/subscribem/spec/dummy

Application Trace | Framework Trace | Full Trace
Request

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"x5sWQF8eRjwD/fcbdI+MJ1Y1gg7u2x7QvCoN3h1/1UM=",
 "account"=>{"name"=>"test",
 "subdomain"=>"test",
 "owner_attributes"=>{"email"=>"jan@ma.de",
 "password"=>"[FILTERED]",
 "password_confirmation"=>"[FILTERED]"}},
 "commit"=>"Create Account"}

我的应用程序控制器如下所示:

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
    protect_from_forgery with: :exception
end

当将protect_from_forgery with: :exception更改为:null_session时,错误消失但我认为这不是解决此问题的正确方法,因为用户应该在此注册操作之后登录,而不是: null_session仅适用于API。

该网站也没有为正在注册但看起来不正确的用户创建任何Cookie。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我看到你正在关注Ryan Bigg关于使用Rails构建多租户应用程序的书。

鉴于此,问题很可能是您需要为您的虚拟应用程序正确设置会话cookie域(默认情况下,它将设置为example.com)。

因此,如果您在subscribem.dev(例如通过Pow)运行虚拟应用,那么您可以在spec/dummy/config/initializers/session_store.rb中设置会话Cookie域,如下所示:

Dummy::Application.config.session_store :cookie_store, key: '_dummy_session', domain: "subscribem.dev"