【问题标题】:The action 'google_oauth2' could not be found for Users::OmniauthCallbacksController无法为 Users::OmniauthCallbacksController 找到操作“google_oauth2”
【发布时间】:2013-04-15 15:10:26
【问题描述】:

我正在使用 'omniauth-google-oauth2' 登录 google 并仔细按照此处的所有说明进行操作

   https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview

但我上面有错误。

我的路线

    devise_for :users, :controllers => {
      :omniauth_callbacks => "users/omniauth_callbacks"

    }

devise.rb 代码

  config.omniauth :google_oauth2, "863625299460- 420n6c7lvad91dfvko60uamtvtr6huhf.apps.googleusercontent.com", "dcvA2aZRZi27KCQjWTYP30pw", {  access_type: "offline", approval_prompt: "" }

omniauth 回调控制器代码

     def google_oauth2
       #@user = User.find_for_google_oauth2(request.env["omniauth.auth"], current_user)
       binding.pry #control not coming here
     end

回调后出现以下错误。看截图

    https://github.com/zquestz/omniauth-google-oauth2/issues/52

【问题讨论】:

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


    【解决方案1】:

    这看起来像是路线问题。如果您执行“rake routes | grep auth”,您会看到什么?

    【讨论】:

    • 我有 mtach 路由,但它也无法匹配 "/users/auth/google_login/callback" ,:to => "users/omniauth_callbacks#goole_oauth2"
    • 我看到使用路由 grep 命令 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) user_omniauth_authorize /users/auth/:provider(.:format) devise/omniauth_callbacks#passthru {:provider=>/google_oauth2/} user_omniauth_callback /users/auth/ :action/callback(.:format) 设计/omniauth_callbacks#(?-mix:google_oauth2)
    • 我的错误是我没有添加这一行。设计 :omniauthable, :omniauth_providers => [:google_oauth2]
    【解决方案2】:

    我遇到了与您描述的完全相同的问题。确保您需要 config/initializers/deviser.rb 中的 omniauth-google-oauth2 gem

    # ==> OmniAuth
    # Add a new OmniAuth provider. Check the wiki for more information on setting
    # up on your models and hooks.
    require "omniauth-google-oauth2"
    config.omniauth :google_oauth2, ENV["GOOGLE_KEY"], ENV["GOOGLE_SECRET"],
                                    { access_type: "offline", approval_prompt: "force" }
    

    我已添加 devise.rb 文件的整个部分以提供上下文。

    【讨论】:

      【解决方案3】:

      已经很晚了,但这个答案可能对其他人有用

      如果您使用devise 进行身份验证,则默认情况下设计会在路由文件devise_for :users 中生成路由,并且您的omniouth_callback 路由应高于默认devise 路由,以便覆盖默认设计路由。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-28
        • 2013-08-02
        • 2020-02-21
        相关资源
        最近更新 更多