Devise 返回 NoMethodError 错误(undefined method ‘new_user_session_path’

3

我刚刚从Devise 1.5.1升级到了Devise 2.0。

Using omniauth (1.0.3) 
Using omniauth-oauth (1.0.1) 
Using omniauth-twitter (0.0.8) 

我将用于推特认证。 我一直在遇到以下问题:
NoMethodError (undefined method `new_user_session_path' for #<ActionDispatch::Routing::RoutesProxy:0x00000009b57c10>

我的路由看起来像这样:

  devise_for :users, :controllers => { :sessions => 'sessions', :omniauth_callbacks => 'authentications' }, :skip => [:sessions] do
    get 'sign-out' => 'sessions#destroy', :as => :destroy_user_session
  end

这个错误出现在生产环境中。在开发环境中一切都正常。我也正在Heroku上运行,如果这有所不同。

你能把你的 rake routes 命令输出粘贴一下吗? - gjb
rake routes | grep session,或者你需要在路由中添加更多内容吗? - Christian Fazzini
2个回答

3
您已将session添加到skip中,这意味着devise不会创建这些路由。如果您想自定义URL,请按照此处的文档进行操作
在您的情况下,应该是这样的:
devise_for :users, :skip => [:sessions]
as :user do
  get 'sign-in' => 'devise/sessions#new', :as => :new_user_session
  post 'sign-in' => 'devise/sessions#create', :as => :user_session
  delete 'sign-out' => 'devise/sessions#destroy', :as => :destroy_user_session
end

2
为什么在开发中没有出现这个问题?其次,如果我明确告诉它跳过 new_user_session_path,为什么 Devise 还会调用它,以及在哪里调用它? - Christian Fazzini
我不知道为什么在开发中没有发生这种情况,但你没有告诉设备跳过“调用”它,你只是告诉它跳过“创建”它。 - zsquare
用户登录应该使用omniauth_callbacks而不是new_user_session。 - Christian Fazzini

1

我之前也遇到了类似的问题,所以我创建了一个自定义路由,这样就解决了我的问题。

match '/users/sign_in' => "devise/sessions#create", :as => :create_user_session

我希望这对你有用。你可以自定义它来适应你的需求。

3
为什么在开发中没有出现这个问题呢? - Christian Fazzini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接