【问题标题】:Cannot getting devise omniauthable working无法让设计全能工作
【发布时间】:2012-06-16 17:07:19
【问题描述】:

我需要访问谷歌 API,我试图让用户使用 Devise 2.1.1 和 Omniauth 使用他们的谷歌帐户登录(使用 gem google_oauth2,因为 OAuth2 是谷歌文档中推荐的一个)。

不幸的是,我无法让它工作,这是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

这里有什么问题?我花了 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    

【问题讨论】:

  • 为什么你的回调控制器是空的?您需要在那里进行google_oauth2 操作。
  • 它是空的,因为还实现了 google_oauth2 没有发生任何事情,所以我想把它留空以查看某种错误......在我看来,它没有被调用全部。此外,通过适当的操作,它会显示错误...

标签: ruby-on-rails ruby-on-rails-3 devise omniauth


【解决方案1】:

您似乎被重定向到您的sign_in 路由,该路由根据您的routes.rb 搜索users/sessions#new

但是,Users::SessionsController 不存在导致您描述的错误。

我不确定在哪些情况下 Devise/OmniAuth 会将您重定向到该特定路线,但我想您可以让它转到您的主页(人们可以再次点击 Google OAuth 登录按钮/链接)或连接它直接到 Google OAuth 页面。 (这可能会使人们陷入无限循环,具体取决于 Devise/OmniAuth 如何使用 sign_in 路由。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多