我有两个问题。我有一个用户试图在Google登录上使用Yahoo帐户登录,但我不知道他们如何设法做到这一点,因此我可以重现此问题。另一个问题是,它似乎确实对它们进行了身份验证,但却引发了ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email"
错误。
用户已经在站点上注册,他们的电子邮件在数据库中,但是由于某种原因,它试图再次创建它们。这是我用来验证它们的代码:
def self.find_or_create_from_oauth!(auth)
user = User.find_or_initialize_by(email: auth.info.email) do |u|
u.first_name = auth.info.first_name
u.last_name = auth.info.last_name
u.image_url = auth.info.image
end
user.save!
user.authentications.find_or_initialize_by(provider: auth.provider, uid: auth.uid).tap do |a|
a.expires_at = Time.at(auth.credentials.expires_at)
a.token = auth.credentials.token
a.save!
end
user
end
当尝试以相同的方式在控制台中找到用户时,我成功做到了。