我经常收到这个错误。在我的应用程序控制器中,我有一个名为after_sign_in_path_for
的方法,在用户使用他的帐户(Devise)登录后重定向用户。
以下是导致错误的行:
request.env['omniauth.origin'] || stored_location_for(resource) || root_url
如果之前的两个选项不起作用,那么这不应该回到root_url
吗?
特别是在与Google(Omniauth)签约后,我遇到了这种情况。
答案 0 :(得分:2)
如果你看一下stored_location_for(resource)
的源代码,它最终会称之为魔法。 obj
这里是resource
,所以如果nil
它会引发你遇到的错误,那么它永远不会回到root_path
def self.find_scope!(obj)
obj = obj.devise_scope if obj.respond_to?(:devise_scope)
case obj
when String, Symbol
return obj.to_sym
when Class
Devise.mappings.each_value { |m| return m.name if obj <= m.to }
else
Devise.mappings.each_value { |m| return m.name if obj.is_a?(m.to) }
end
raise "Could not find a valid mapping for #{obj.inspect}"
end
https://github.com/plataformatec/devise/blob/master/lib/devise/mapping.rb