Rails 5 Devise 和 OmniAuth Twitter 设置在授权应用程序后重定向到 sign_in 表单

Rails 5 Devise and OmniAuth Twitter setup redirects to sign_in form after authorising app

我正在尝试在我的 Devise 上安装 OmniAuth-Twitter。我正在学习本教程 https://www.youtube.com/watch?v=X6tKAUOMzCs&t=42s,但我收到一个错误,我无法在网上找到任何地方。实际上这不是错误,在我从 Twitter 授权应用程序后,它重定向到我的 sign_in 表单!

omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, "ididputmykeyhere", "ididputmykeyhere"
end

routes.rb

Rails.application.routes.draw do
  devise_for :users, :controllers => { :omniauth_callbacks => "omniauth_callbacks" }

  resources :posts
  resources :categories
  root 'posts#index'
end

omniauth_callbakcs_controller.rb

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def twitter
    # Show me what I get from Twitter
    raise request.env["omniauth.auth"].to_yaml

    @user = User.from_omniauth(request.env["omniauth.auth"])
    sign_in_and_redirect @user
  end
end

devise.rb

  config.omniauth :twitter, ENV["ididputmykeyhere"], ENV["ididputmykeyhere"]

user.rb

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :omniauthable, :omniauth_providers => [:twitter]

  has_many :posts
end

我把user_twitter_omniauth_authorize_pathlink放到了我的视图中。

  1. 它重定向到 Twitter 授权页面 ✅
  2. 我从 Twitter 授权应用程序 ✅
  3. 我期待它提高 request.env["omniauth.auth"] 但它重定向到 localhost:3000/users/sign_in 我看到登录表格的地方 ❌

它就像跳过我的 omniauth_callbacks_controller 我将写入保存到数据库代码的地方,我错过了什么?谢谢大家!


++++++++++++++++++++++更新++++++++++++++++ +++++

我刚刚将 def failure 添加到我的 omniauth_callbakcs_controller.rb 中,我看到该应用程序正在为此而努力。

  def failure

    raise request.env["omniauth.auth"].to_yaml

    flash[:error] = 'There was a problem signing you in. Please register or try signing in later.'
    redirect_to root_path
  end

因此,出于某种原因,该应用程序正在跳过我的 def Twitter

这太奇怪了,但是删除 omniauth.rb 文件解决了这个问题。我在 omniauth.rb 和 devise.rb 文件中定义了 API 键。也许在多个文件中定义会导致某种冲突。