15

我注意到登录到 Devise 时,我开始收到这些错误消息。

我将 Devise 2.2.4 与 Omniauth 1.1.4 和 Omniauth-Facebook 1.4.1 一起使用

有谁知道这个错误的原因是什么?

  ActionView::Template::Error (undefined method `omniauth_authorize_path' for #<#<Class:0xb85e534>:0xb904e5c>):
21: <%- if devise_mapping.omniauthable? %>
22:   <%- resource_class.omniauth_providers.each do |provider| %>
23:     <% logger.info "hey #{provider} , dolphin and #{resource_name}" %>
24:     <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br />
25:   <% end -%>
26: <% end -%>

  app/views/devise/shared/_links.erb:24:in `block in _app_views_devise_shared__links_erb___1039642231_94147460'
  app/views/devise/shared/_links.erb:22:in `each'
  app/views/devise/shared/_links.erb:22:in `_app_views_devise_shared__links_erb___1039642231_94147460'
  app/views/devise/sessions/new.html.erb:17:in `_app_views_devise_sessions_new_html_erb__883448937_92868060'
4

7 回答 7

19

一个可能的错误是omniauth 配置设置在错误的位置。

config/initializers/omniauth.rb我遇到了这个错误,因为我按照omniauth 自述文件的指示将我的facebook 帐户设置为。

但是,我们需要通过设计来设置它,即config/initializers/devise.rb在omniauth 部分。

于 2013-12-16T09:54:30.607 回答
11

今天(2016 年 7 月 27 日)当我升级到 Ruby 2.3.1 和 Rails 4.2.7 时,我开始收到此错误。对我有用的解决方案是更改 to 的所有user_omniauth_authorize_path(:twitter)实例user_twitter_omniauth_authorize_path

于 2016-07-27T21:02:29.550 回答
5

尝试

user_omniauth_authorize_path(provider)

我假设您有一个 User 类,并且在您的路线文件中

devise_for :users
于 2013-09-28T01:45:33.797 回答
3

那样做

<%- if devise_mapping.omniauthable? %>
  <%- resource_class.omniauth_providers.each do |provider| %>
    <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", public_send("user_#{provider.to_s}_omniauth_authorize_path") %><br />
  <% end -%>
<% end -%>

这使它可用于多个提供程序,但它假设您正在使用

devise_for :users

但更进一步,您还可以添加

resource_class.name.downcase

不仅覆盖用户

<%- if devise_mapping.omniauthable? %>
  <%- resource_class.omniauth_providers.each do |provider| %>
     <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", public_send("#{resource_class.name.downcase}_#{provider.to_s}_omniauth_authorize_path") %><br />
  <% end -%>
<% end -%>

如果 devise_for 是用户并且提供者是 facebook,那么它将创建路径:

user_facebook_omniauth_authorize_path

如果 devise_for 是管理员和提供者 twitter,那么它将创建路径:

admin_twitter_omniauth_authorize_path

于 2016-09-20T20:48:05.670 回答
2

设计将 url 助手更改为omniauth_authorize_path(<scope>, <provider>)

见这里: http ://www.rubydoc.info/github/plataformatec/devise/Devise%2FOmniAuth%2FUrlHelpers%3Aomniauth_authorize_path

于 2016-09-21T20:25:56.613 回答
2

如果您在中初始化您的设计提供程序,config/initializers/omniauth.rb您应该Devise::OmniAuth::UrlHelpers在您的config/initializers/omniauth.rbconfig/initializers/devise.rb

于 2018-10-15T18:42:35.090 回答
0

在您的 app/views/devise/shared/_links.erb 中:

改变

omniauth_authorize_path

user_omniauth_authorize_path(provider)

于 2016-12-26T08:33:22.960 回答