"Routing Error No route matches {}" 当全身份验证在注册时失败时



我使用omnauth标识并配置其"注册失败"。

我的文件:

config/initializers/omniauth.rb

OmniAuth.config.logger = Rails.logger
Rails.application.config.middleware.use OmniAuth::Builder do
  #...
  provider :identity, on_failed_registration: lambda { |env|
    IdentitiesController.action(:new).call(env)
  }
end

config/routes.rb

Wie::Application.routes.draw do
  root to: 'categories#index'
  ActiveAdmin.routes(self)
  devise_for :admin_users, ActiveAdmin::Devise.config
  match 'auth/:provider/callback', to: 'sessions#create'
  match 'auth/failure', to: 'sessions#failure'
  match 'signout', to: 'sessions#destroy', as: 'signout'
  resources :identities#, only: [:new]
  resources :categories, path: '', only: [:index] do
    resources :entries, path: '', only: [:index, :show]
  end
end

app/controllers/identities _controller.rb

class IdentitiesController < ApplicationController
  def new
    ariane.add "New Account"
    @identity = env['omniauth.identity']
  end
end

当我注册失败(传递错误的邮件)时,我会得到以下信息:

在浏览器中:

路由错误

没有匹配的路由{}请尝试运行rake路由以获取有关的详细信息可用路线。

在服务器日志中:

于2012-07-16启动127.0.0.1的POST"/auth/identity/register"17:35:48+0300(0.1ms)开始交易身份存在(0.2ms)从"标识"到"标识",选择1作为其中之一。"电子邮件"="foo"LIMIT 1(0.1ms)回滚事务处理方式IdentitiesController#new as HTML参数:{"utf8"=>"✓","authenticity_token"=>"HIDDEN:)>=","name"=>","email"=>"foo","password"=>"[FILTERED]","password_conconfirmation"=>"[FILTERED]","commit"=>"Register"}
布局/应用程序中的呈现标识/new.html.erb(11.2ms)44ms 中完成500内部服务器错误

ActionController::RoutingError(没有与{}匹配的路由):
app/views/layouts/application.html.erb:35:in_app_views_layouts_application_html_erb___1224394470845933684_70120630781720' config/initializers/omniauth.rb:8:in调用'
config/initializers/omniauth.rb:8:在中的"块(2级)"中

已渲染/用户/aya/.rvm/gems/ruby-1.9.3-p125@global/救援/布局内的gems/actionpack-3.2.6/lib/action_dispatch/middleware/templates/rescues/routing_error.erb(0.6ms)

发生这种情况的原因是什么?我做错了什么

更新我不明白的是——为什么我会得到Started POST "/auth/identity/register"?根据omniauth配置,我应该获得与IdentitiesController.action(:new)对应的视图,即/identitys/new。。。

该问题无法在1.1.0版本的omniauth-identiry上重现。所以更新到最新版本解决了这个问题。

最新更新