使用 Devise 和 Omniauth 删除用户后,提供程序和 uid 是否存储在另一个表中?
在我的 Rails 4 应用程序中,我尝试按照设计和 Omniauth 概述指南将 Omniauth-facebook 与设计集成
我使用我的 Facebook 帐户成功登录(并创建了一个帐户)。然后作为另一个管理员用户,我删除了用于注册 Facebook 的帐户。
我尝试使用同一个 Facebook 帐户登录 Facebook(以重新创建我的帐户),这次我被重定向到常规电子邮件注册页面。
我进入我的 Rails 控制台并检查是否有任何用户使用我的 facebook 提供程序和 UID 并找到一个对象ActiveRecord::Relation
2.1.3 :001 > user = User.where(provider: "facebook", uid: 'MYFACEBOOKUID')
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."provider" = 'facebook' AND "users"."uid" = 'MYFACEBOOKUID'
=> #<ActiveRecord::Relation []>
我相信当我使用 Facebook 删除我的帐户时,这个 ActiveRecord::Relation 并没有被破坏。现在它阻止我使用我的 Facebook 帐户注册。
如何删除此关系?
我的用户模型:
class User < ActiveRecord::Base
rolify before_add: :before_add_method
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:facebook]
before_create :set_default_role
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
user.first_name = auth.info.first_name
user.last_name = auth.info.last_name
user.username = auth.info.nickname
user.facebook_page = auth.extra.raw_info.link
user.gender = auth.extra.raw_info.gender
end
end
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
user.email = data["email"] if user.email.blank?
user.first_name = data["first_name"] if user.first_name.blank?
user.last_name = data["last_name"] if user.last_name.blank?
user.valid?
# user.email = data["email"] if user.email.blank?
end
end
end
private
def before_add_method(role)
# do something before it gets added
end
def set_default_role
if User.count == 0
self.add_role :admin
else
self.add_role :user unless User.count == 0
end
end
end