0

我正在尝试将OmniAuth-Twitter安装在我的Devise之上。我正在关注本教程https://www.youtube.com/watch?v=X6tKAUOMzCs&t=42s但我遇到了一个我无法在线找到的错误。实际上这不是错误,在我从 Twitter 授权应用程序后,它会重定向到我的登录表单!

全域认证.rb

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

路线.rb

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

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

omn​​iauth_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

设计.rb

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

用户.rb

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

  has_many :posts
end

我放置了 user_twitter_omniauth_authorize_path链接到我的视图。

  1. 它重定向到 Twitter 授权页面 ✅</li>
  2. 我从 Twitter 授权应用程序✅</li>
  3. 我希望它会引发request.env["omniauth.auth"]但它会重定向到localhost:3000/users/sign_in我在此处看到登录表单❌</li>

它就像跳过我的omniauth_callbacks_controller,我将在其中写入保存到数据库代码,我错过了什么?谢谢吨!


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

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

  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

4

1 回答 1

0

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

于 2017-10-02T19:37:03.927 回答