0

それで、私はかなり単純な Rails 4 アプリに取り組んできましたが、ユーザー認証を追加する必要があるところまで来ました。特に、devise と omniauth を組み合わせて Google Apps (および Google Apps のみ) 認証を使用したいと考えています。現在、devise には、そのようなものを設定する方法を教えてくれると思われるチュートリアルがあります。デバイスをインストールし、チュートリアルで提案された変更を行った後、すべてが素晴らしいように見えました. サインイン リンクをクリックすると、認証のために Google に適切に送信されました。ただし、資格情報を提供した後、すぐにルーティング エラーが表示されます。

uninitialized constant Users

これは紛らわしいです。私が理解していることから、それはコントローラーが欠落していることを意味します...しかし、私は間違いなく持ってusers_controller.rbおり、あるべき場所にあります。それがなければ、私には手がかりがありません。

ここに私route.rbの参照があります:

  resources :instances, :users

  devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks' }

  # authentication routes
  devise_scope :user do
    get 'sign_in', :to => 'devise/sessions#new', :as => :new_user_session
    get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
  end

  root to: 'instances#index'

そして、ここにの結果がありrake routesます:

                 Prefix Verb     URI Pattern                            Controller#Action
              instances GET      /instances(.:format)                   instances#index
                        POST     /instances(.:format)                   instances#create
           new_instance GET      /instances/new(.:format)               instances#new
          edit_instance GET      /instances/:id/edit(.:format)          instances#edit
               instance GET      /instances/:id(.:format)               instances#show
                        PATCH    /instances/:id(.:format)               instances#update
                        PUT      /instances/:id(.:format)               instances#update
                        DELETE   /instances/:id(.:format)               instances#destroy
                  users GET      /users(.:format)                       users#index
                        POST     /users(.:format)                       users#create
               new_user GET      /users/new(.:format)                   users#new
              edit_user GET      /users/:id/edit(.:format)              users#edit
                   user GET      /users/:id(.:format)                   users#show
                        PATCH    /users/:id(.:format)                   users#update
                        PUT      /users/:id(.:format)                   users#update
                        DELETE   /users/:id(.:format)                   users#destroy
user_omniauth_authorize GET|POST /users/auth/:provider(.:format)        users/omniauth_callbacks#passthru {:provider=>/google_apps/}
 user_omniauth_callback GET|POST /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:google_apps)
       new_user_session GET      /sign_in(.:format)                     devise/sessions#new
   destroy_user_session GET      /sign_out(.:format)                    devise/sessions#destroy
                   root GET      /                                      instances#index

また、Rails 4 と devise 3.0.0.rc を実行していることにも注意してください (Rails 4 と互換性があるため)。

他に必要なものがあれば教えてください。関連するものはほとんどすべてチュートリアルにあります。

4

1 に答える 1

2

You're problem lies here: :omniauth_callbacks => 'users/omniauth_callbacks'

'users/omniauth_callbacks' translates to Users::OmniauthCallbacksController. While your application does have a User model and a UserController, you haven't declared a constant which defines a Users namespace.

You'll need to add a controller in that namespace to handle the callback:

# app/controllers/users/omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  # action names should match the names of the providers
  def facebook; end
  def twitter; end
  def github; end
  ...
end
于 2013-06-28T21:21:05.723 に答える