不能让设计omniauthable工作(Cannot getting devise omniauth

2019-09-18 04:57发布

我需要访问谷歌的API,我试图让用户使用设计2.1.1和Omniauth(使用宝石他们的谷歌帐户登录google_oauth2以来的OAuth2是从谷歌文档的reccomended一个)。

不幸的是,我不能得到它的工作,这是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'}

而实际上我有一个空回调类app/controllers/users/omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
end

当我点击“在与谷歌”我被重定向谷歌,要求授权,然后我回去回调,而我重定向的URL http://localhost:3000/sign_in.user与错误

uninitialized constant Users::SessionsController

什么是错在这里? 我花了2个时间试图通过自己找出它,我打了很多配置,但从来没有得到它的工作,它开始折腾我。

这是从输出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    

Answer 1:

看来你被重定向到您的sign_in其搜索路线users/sessions#new按你routes.rb

然而, Users::SessionsController不存在导致您所描述的错误。

我不知道在这种情况下设计/ OmniAuth重定向到特定的路线,但我想你可以把它转到您的主页(在这里人们可以在按钮/链接再次点击谷歌的OAuth号)或直接连接到谷歌的网页的OAuth。 (这可能让人们陷入无限循环依赖于设计/ OmniAuth如何使用sign_in路线。)



文章来源: Cannot getting devise omniauthable working