私はこのFacebookのomniauth統合を完了しようとしており、以下のエラーが発生しました。何が起こるのかは分かりません。それは、フェイスブックの認証を使用してログインしようとする2回目だけに発生します。初めて(ユーザー作成時)完全に動作します。しかし、ログアウトしてログインすると、このエラーがスローされます。ActionController :: UnknownFormatエラー(テンプレートが抜けています)をUsers :: OmniauthCallbacksController#facebookで、レールアプリケーションでDevise gemを使用していますか?
は、ここで私はこれを構築するためにGoRails.com FB omniauthチュートリアルを使用していますエラー
ActionController::UnknownFormat in Users::OmniauthCallbacksController#facebook
Users::OmniauthCallbacksController#facebook is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: [] NOTE! For XHR/Ajax or API requests, this action would normally respond with 204 No Content: an empty white screen. Since you're loading it in a web browser, we assume that you expected to actually render a template, not nothing, so we're showing an error to be extra-clear. If you expect 204 No Content, carry on. That's what you'll get from an XHR or API request. Give it a shot.
User.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable
has_many :services
has_paper_trail
scope :referred, -> { where.not(:referral_id => nil) }
end
omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
before_action :send_referral_event_email, only: [:create]
def facebook
service = Service.where(provider: auth.provider, uid: auth.uid).first
if service.present?
user = service.user
service.update(
expires_at: Time.at(auth.credentials.expires_at),
access_token: auth.credentials.token,
)
else
user = User.create(
email: auth.info.email,
name: auth.info.name,
password: Devise.friendly_token[0,20]
)
user.services.create(
provider: auth.provider,
uid: auth.uid,
expires_at: Time.at(auth.credentials.expires_at),
access_token: auth.credentials.token,
)
if session[:cte_id]
UserMailer.delay.send_referred_message(user)
sign_in_and_redirect user, event: :authentication
set_flash_message :notice, :success, kind: "Facebook"
else
ActionWins.create_advocate(user.email)
UserMailer.delay.advocate_registration_email(user)
sign_in_and_redirect user, event: :authentication
set_flash_message :notice, :success, kind: "Facebook"
end
end
end
def auth
p request.env['omniauth.auth']
end
def after_sign_in_path_for(resource)
if session[:cte_id]
static_thankyou_path
else
root_url
end
end
def send_referral_event_email
if params[:cte_id]
UserMailer.delay.send_referred_message(@user)
end
end
end
です。ここ
は、DBからのユーザモデルは助けを
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "referral_id"
t.string "first_name"
t.string "last_name"
t.string "phone_number"
t.boolean "redeemed", default: false
t.string "dealership"
t.integer "points", default: 0
t.boolean "referral_completed", default: false
t.string "name"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
感謝です!