错误Ruby on Rails:Users :: OmniauthCallbacksController #facef缺少此请求格式和变体的模板

时间:2017-09-07 01:18:24

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

我正在尝试使用facebook添加外部登录,但每当我意识到主页正确地将我引导到Facebook页面时,我就会收到以下错误,并且无法理解它可能是什么。

“Users :: OmniauthCallbacksController #facebook缺少此请求格式和变体的模板.request.formats:[”text / html“] request.variant:[]注意!对于XHR / Ajax或API请求,此操作通常会回复204 No Content:一个空的白色屏幕。由于你是在网页浏览器中加载它,我们假设你希望实际渲染一个模板,而不是什么,所以我们显示一个错误是非常明确的如果你期望204 No Content,那就继续吧。这就是你从XHR或API请求中得到的。给它一个机会。“

          "That's what you'll get from an XHR or API request. Give it a shot."

        raise ActionController::UnknownFormat, message
          else
        logger.info "No template found for #{self.class.name}\##{action_name}, rendering head :no_content" if logger
        super

这是我的控制器

class Users::OmniauthCallbacksController < ApplicationController
  def facebook
    @User = User.from_omniauth(request.env["omniauth.auth"])
    if @User.persisted?
      @User.remember_me = true
      sign_in_and_redirect @User, event: :authentication
    end
  end

end

这是用户模型。

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,:omniauthable, :omniauth_providers => [:facebook]


  def self.from_omniauth(auth)
     where(provider: auth[:provider], uid: auth[:uid]).first_or_create do |user|
       if auth[:info]
         user.email = auth[:info][:email]
         user.name = auth[:info][:name]
       end

       user.password = Devise.friendly_token[0,20]
     end
  end
  has_many :articles , :dependent => :destroy
end

我把这行放在config / initializers / divise.rb

config.omniauth :facebook, '504432376574467', 'b2bb80641fcc2ca4d28e48c5ce*******'

1 个答案:

答案 0 :(得分:0)

我的猜测是User.from_omniauth无法创建用户(可能由于user.passworduser.password_confirmation不匹配),这导致Users::OmniauthCallbacksController#facebook到达结尾没有进入if子句的方法。

要检查,您可以在Facebook回调中添加else子句,并在其中raise出现错误。