2013-09-25 16 views
6

Ich habe festgestellt, dass beim Anmelden an Devise habe ich begonnen, diese Fehlermeldung zu erhalten.Devise Omniahuth undefined Methode omniauth_authorize_path

Ich verwende Devise 2.2.4 mit Omniauth 1.1.4 und Omniauth-Facebook 1.4.1

Weiß jemand, was die Ursache für diesen Fehler ist?

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' 

Antwort

2

Versuchen

user_omniauth_authorize_path(provider) 

Ich gehe davon aus Sie eine Benutzerklasse haben und in die Routenberechnung Datei, die Sie haben

devise_for :users 
+0

Das bei Build-in geschieht/users/sign_in Ansicht. – lulalala

10

Ein möglicher Fehler ist, dass omniauth Konfiguration wird am falschen gesetzt Ort.

Ich bin auf diesen Fehler gestoßen, weil ich meine Facebook-Konten in config/initializers/omniauth.rb eingerichtet habe, wie in der omniauth readme beschrieben.

Allerdings müssen wir es durch Devise, d. H. config/initializers/devise.rb im Omniauth Abschnitt setzen.

+1

Das ist, weil die omniauth readme nicht für omniauth + devise ist – Alfie

8

Ich habe diesen Fehler heute (27. Juli 2016) bekommen, als ich auf Ruby 2.3.1 und Rails 4.2.7 aufgerüstet habe. Die Lösung, die für mich funktionierte, bestand darin, alle Instanzen von user_omniauth_authorize_path(:twitter) in user_twitter_omniauth_authorize_path zu ändern.

+1

Das gleiche hier scheint eine Änderung in Gerät 4.x. Downgrade nach 3.5.6 hat es für mich behoben. – thebenedict

0

Machen Sie es wie die

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

Diese nutzbar für mehrere Anbieter macht, aber es wird davon ausgegangen Sie

verwenden
devise_for :users 

Aber kommen wir noch weiter kann man auch hinzufügen

resource_class.name.downcase 

um nicht nur Benutzer

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

Wenn devise_for Benutzer und Anbieter ist Facebook, dann wird es Weg machen:

user_facebook_omniauth_authorize_path

wenn devise_for admins und Anbieter twitter ist, dann wird es Weg machen:

admin_twitter_omniauth_authorize_path

0

In Ihrem app/views/ersinnen/shared/_links.erb:

Änderung

omniauth_authorize_path

zu

user_omniauth_authorize_path(provider)

Verwandte Themen