ActiveRecord::RecordNotUnique (PG::UniqueViolplicate 键值违反唯一约束"index_users_on_email":错误:du



我使用omniauth-kakao gem通过SNS登录。

然后我成功登录,我得到了SNS的令牌和个人资料。

但是当其他用户(不是我(通过SNS注册时,我遇到了错误

ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "index_users_on_email"

这是app/model/user.rb中的代码,导致错误

def self.find_for_oauth(auth, signed_in_resource = nil)
identity = Identity.find_for_oauth(auth)
user = signed_in_resource ? signed_in_resource : identity.user
if user.nil?
email = auth.info.email
user = User.where(:email => email).first
unless self.where(email: auth.info.email).exists?
if user.nil?
user = User.new(
profile_img: auth.info.image,
password: Devise.friendly_token[0,20]
)
user.save!      #Error message said this line is problem
end
end
end
if identity.user != user
identity.user = user
identity.save!
end
user
end

另外,我做了两个模型。User.rbIdentity.rb.(Identity.rb 參考 User.rb(

Identity.rb具有"提供程序(sns(","用户"列。User.rb有用户信息,SNS列的个人资料。

发生错误时,行已添加到Identity.rb,并且此行未user_id"用户"列中。(添加了其他内容,仅未添加user_id(

此外,行未添加到User.rb从不

怎么了??

您是否不应该在下面的代码中将 user 与 user 一起保存email

if user.nil?
user = User.new(
profile_img: auth.info.image,
password: Devise.friendly_token[0,20]
)
user.save!      #Error message said this line is problem
end

它应该是这样的:

if user.nil?
user = User.new(
profile_img: auth.info.image,
email: email,
password: Devise.friendly_token[0,20]
)
user.save!      #Error message said this line is problem
end

相关内容

最新更新