【问题标题】:The action 'twitter' could not be found for Devise::OmniauthCallbacksController找不到 Devise::OmniauthCallbacksController 的操作“twitter”
【发布时间】:2017-09-16 17:07:47
【问题描述】:

我正在尝试将 twitter 与我的 rails 应用程序中的设计集成。

但是,我收到此错误 找不到 Devise::OmniauthCallbacksController 的操作“twitter”

我的路线文件包含:

  devise_for :conrollers => {:omniauth_callbacks =>  "omniauth_callbacks"}

我看到了一些线程,但不太能够解决这个问题。请帮忙。 这是我的控制器

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def twitter
    raise request.env["omniauth.auth"].to_yaml
end

#alias_method :twitter, :all

结束

【问题讨论】:

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


    【解决方案1】:

    既然Devise::OmniauthCallbacksController 继承自DeviseController,为什么不直接添加你的twitter 方法DeviseController

    class DeviseController
      def twitter
        raise request.env["omniauth.auth"].to_yaml
      end
    end
    

    或者你可以这样做:

    class Devise::OmniauthCallbacksController
      def twitter
        raise request.env["omniauth.auth"].to_yaml
      end
    end
    

    或者如果你有一个controllers/devise 目录,这可能会起作用:

    module Devise
      class OmniauthCallbacksController
        def twitter
          raise request.env["omniauth.auth"].to_yaml
        end
      end
    end
    

    【讨论】:

    • 我应该在哪里添加 DeviseController 类?
    • 你可以放到app/controllers
    【解决方案2】:

    你应该在用户模型中有一个设计调用。只需在此处添加另一个参数

    devise :database_authenticatable, :registerable, :confirmable.......
           ......., :omniauth_providers: [:twitter]
    

    【讨论】:

      【解决方案3】:

      我收到了相同的错误消息,这就是我修复它的方法。我在 OmniauthCallbacksController 文件中定义了一个 Twitter 方法

      class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
        skip_before_action :verify_authenticity_token
      
        def sign_in_with(provider_name)
          @user = User.from_omniauth(request.env["omniauth.auth"])
          sign_in_and_redirect @user, :event => :authentication
          set_flash_message(:notice, :success, :kind => provider_name) if is_navigational_format?
        end
      
        def facebook
          sign_in_with "Facebook"
        end
        def github
          sign_in_with "Github"
        end
      
        def linkedin
          sign_in_with "LinkedIn"
        end
      
        def twitter
          sign_in_with "Twitter"
        end
      
        def google_oauth2
          sign_in_with "Google"
        end
      
        def developer
          sign_in_with "Developer"
        end
      end
      

      【讨论】:

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