0
美好的一天,我是新的紅寶石在軌道上。我正在開發一個旅遊應用程序,並且我想提供用facebook登錄的選項。其實我的應用程序工作正常,使用Facebook的註冊,但錯誤發生時,我關閉會議,當我試圖再次登錄Facebook,它顯示'電子郵件已被採取'有人可以幫助嗎?我會感謝你的幫助。omniauth-facebook錯誤電子郵件已被採取
user.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
devise :omniauthable, omniauth_providers: [:facebook]
has_many :destinations
has_many :deals
has_many :payments
has_many :transactions
has_many :questions
has_many :comments
def self.find_or_create_by_omniauth(auth)
user = User.find_by(provider: 'provider', uid: ':uid')
unless user
user = User.create(
name: auth[:name],
last_name: auth[:last_name],
nickname: auth[:nickname],
email: auth[:email],
uid: auth[:uid],
provider: auth[:provider],
password: Devise.friendly_token[0,20]
)
end
user
end
end
的routes.rb
Rails.application.routes.draw do
devise_for :users, controllers: {omniauth_callbacks: "omniauth_callbacks"}
end
omniauth_callbacks_controller.rb
class OmniauthCallbacksController < ApplicationController
def facebook
auth = request.env["omniauth.auth"]
data = {
name: auth.info.first_name,
last_name: auth.info.last_name,
nickname: auth.info.nickname,
email: auth.info.email,
provider: auth.provider,
uid: auth.uid
}
@user = User.find_or_create_by_omniauth(data)
if @user.persisted?
sign_in_and_redirect @user, event: :authentication
else
session[:omniauth_errors] = @user.errors.full_messages.to_sentence unless @user.save
session[:omniauth_data] = data
redirect_to new_user_registration_url
end
end
end
什麼是缺失?