我使用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.rb
和Identity.rb
。(Identity.rb请参阅User.rb)
Identity.rb
有'提供商(sns)','用户'柱。
User.rb
拥有用户的信息,SNS列的个人资料。
发生错误时,行已添加到Identity.rb
,此行中没有user_id用户'用户' column。(添加了其他内容,但未添加user_id)
此外,行未添加到User.rb
从不
问题是什么?
答案 0 :(得分:0)
如果你没有用以下代码在db中保存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