Rails 上的错误 Ruby:Users::OmniauthCallbacksController#facebook 缺少此请求格式和变体的模板
Error Ruby on Rails: Users::OmniauthCallbacksController#facebook is missing a template for this request format and variant
我正在尝试添加 facebook 的外部登录,但每当我意识到主页正确地将我定向到 facebook 页面时,我就会收到以下错误,并且无法理解它是什么。
"Users::OmniauthCallbacksController#facebook is missing a template for this request format and variant. 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*******'
我的猜测是 User.from_omniauth
无法创建用户(可能是由于 user.password
和 user.password_confirmation
不匹配),这导致 Users::OmniauthCallbacksController#facebook
到达方法结束而不进入 if
子句。
要进行检查,例如,您可以在 Facebook 回调中添加一个 else
子句,并在其中添加一个错误 raise
。
我正在尝试添加 facebook 的外部登录,但每当我意识到主页正确地将我定向到 facebook 页面时,我就会收到以下错误,并且无法理解它是什么。
"Users::OmniauthCallbacksController#facebook is missing a template for this request format and variant. 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*******'
我的猜测是 User.from_omniauth
无法创建用户(可能是由于 user.password
和 user.password_confirmation
不匹配),这导致 Users::OmniauthCallbacksController#facebook
到达方法结束而不进入 if
子句。
要进行检查,例如,您可以在 Facebook 回调中添加一个 else
子句,并在其中添加一个错误 raise
。