2013-09-25 75 views
6

我注意到,當記錄到設計我已經開始接收這些錯誤信息。設計Omniauth未定義的方法omniauth_authorize_path

我使用的設計2.2.4與1.1.4 Omniauth和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' 

回答

2

嘗試

user_omniauth_authorize_path(provider) 

我假設你有一個用戶類,並在你的路由文件,你有

devise_for :users 
+0

這發生在內建/用戶/ sign_in視圖。 – lulalala

10

一個可能的錯誤是,omniauth配置設置在錯誤的地點。

我遇到了這個錯誤,因爲我按照omniauth自述文件的說明在config/initializers/omniauth.rb中設置了我的Facebook帳戶。

但是,我們需要在omniauth部分通過設計,即config/initializers/devise.rb進行設置。

+1

這是因爲omniauth自述文件不適用於omniauth + devise – Alfie

8

我今天(2016年7月27日)升級到Ruby 2.3.1和Rails 4.2.7時開始出現此錯誤。我的解決方案是將user_omniauth_authorize_path(:twitter)的所有實例更改爲user_twitter_omniauth_authorize_path

+1

同樣在這裏,似乎是在設計4.x中的更改。降級設計爲3.5.6爲我解決了它。 – thebenedict

0

那樣做

<%- 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

0

在您的應用程序/視圖/設計/共享/ _links。ERB:

變化

omniauth_authorize_path

user_omniauth_authorize_path(provider)

相關問題