1

每当我在通过 Google 登录时尝试更新名字和姓氏时,它都会更新值。但是当我重新登录时,它显示旧值(以前的值没有保存)。

这是我的代码:

  def self.create_user_for_google(data)      
    where(uid: data['email']).first_or_initialize.tap do |user|
      user.provider = 'google_oauth2'
      user.uid = data['email']
      user.first_name = data['given_name']
      user.last_name = data['family_name']
      user.avatar = data['picture']
      user.email = data['email']
      user.password = Devise.friendly_token[0, 20]
      user.password_confirmation = user.password
      user.save!
    end
  end

登录时的终端日志:

User Load (13.3ms)  SELECT  "users".* FROM "users" WHERE "users"."uid" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["uid", "shrijana460@gmail.com"], ["LIMIT", 1]]
   (0.3ms)  BEGIN
  SQL (0.5ms)  UPDATE "users" SET "encrypted_password" = $1, "updated_at" = $2 WHERE "users"."id" = $3  [["encrypted_password", "$2a$11$ZciQXx/CT002PMF9H39YNeEKG2PntUGY7He700b.2jf1AxQ5wRh5."], ["updated_at", "2018-03-26 11:50:30.371416"], ["id", "5b069a90-fb67-4ecb-8d50-35f7db998968"]]
   (20.2ms)  COMMIT
   (0.2ms)  BEGIN
  SQL (0.6ms)  UPDATE "users" SET "tokens" = $1, "updated_at" = $2 WHERE "users"."id" = $3  [["tokens", "{\"5-4d695IrkWxSCZIvRVKPA\":{\"token\":\"$2a$10$xa12/ZD9X.WFlkl9hpsYj.Ft3Ru.wkmbAPd1YjS5rBFwLHYN9Apd.\",\"expiry\":1522151430,\"last_token\":null,\"updated_at\":\"2018-03-26T17:35:30.394+05:45\"}}"], ["updated_at", "2018-03-26 11:50:30.506272"], ["id", "5b069a90-fb67-4ecb-8d50-35f7db998968"]]
   (85.0ms)  COMMIT
   (0.4ms)  BEGIN
   (0.6ms)  COMMIT
4

1 回答 1

1

尝试以下操作:

where(uid: data['email']).first_or_create do |user|
  user.provider = 'google_oauth2'
  user.first_name = data['given_name']
  user.last_name = data['family_name']
  user.avatar = data['picture']
  user.email = data['email']
  user.password = Devise.friendly_token[0, 20]
  user.password_confirmation = user.password
end

您的实现会在每次通过 Google 登录时使用旧数据更新用户

where(uid: data['email']).first_or_initialize.tap do |user|
  ...
  user.save!
end
于 2018-03-26T13:43:48.787 回答