我需要访问 google API,我试图让用户使用 Devise 2.1.1 和 Omniauth (使用 gemgoogle_oauth2
因为 OAuth2 是 Google 文档推荐的)。
不幸的是我无法让它工作,这是routes.rb
TestApp::Application.routes.draw do
root :to => 'Landing#index'
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
devise_scope :user do
get 'sign_in', :to => 'users/sessions#new', :as => :new_session
get 'sign_out', :to => 'users/sessions#destroy', :as => :destroy_session
end
end
然后我配置了config/initializers/devise.rb
包括一行
config.omniauth :google_oauth2, 'ID', 'SECRET', {access_type: 'offline', approval_prompt: 'force', scope: 'https://www.googleapis.com/auth/analytics.readonly'}
实际上我有一个 void 回调类app/controllers/users/omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
end
当我点击“使用 Google 登录”时,我在 Google 上被重定向,要求授权,然后我返回到回调,并在 URL 上被重定向http://localhost:3000/sign_in.user
与错误
uninitialized constant Users::SessionsController
这是怎么回事?我花了两天时间试图自己弄清楚它,我尝试了很多配置但从未让它工作,这让我开始感到沮丧。
这是输出rake routes
root / Landing#index
user_omniauth_authorize /users/auth/:provider(.:format) users/omniauth_callbacks#passthru {:provider=>/google_oauth2/}
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:google_oauth2)
new_session GET /sign_in(.:format) users/sessions#new
destroy_session GET /sign_out(.:format) users/sessions#destroy