我注意到在登录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'
答案 0 :(得分:14)
一个可能的错误是omniauth配置设置在错误的位置。
我遇到了这个错误,因为我按照omniauth自述文件的说明在config/initializers/omniauth.rb
设置了我的Facebook帐户。
但是我们需要通过设计来设置它,即在omniauth部分设置config/initializers/devise.rb
。
答案 1 :(得分:10)
我今天(2016年7月27日)开始收到此错误,当时我升级到Ruby 2.3.1和Rails 4.2.7。对我有用的解决方案是将user_omniauth_authorize_path(:twitter)
的所有实例更改为user_twitter_omniauth_authorize_path
。
答案 2 :(得分:4)
尝试
user_omniauth_authorize_path(provider)
我假设您有一个User类,并且在您的路径文件中有
devise_for :users
答案 3 :(得分:1)
这样做
<%- 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
答案 4 :(得分:0)
Devise将网址助手更改为omniauth_authorize_path(<scope>, <provider>)
答案 5 :(得分:0)
在你的app / views / devise / shared / _links.erb中:
变化
omniauth_authorize_path
到
user_omniauth_authorize_path(provider)
答案 6 :(得分:0)
如果您在config/initializers/omniauth.rb
中初始化设备提供者,则应在Devise::OmniAuth::UrlHelpers
或config/initializers/omniauth.rb
中加入config/initializers/devise.rb