Войти в Google Outh2 в рельсах
Всякий раз, когда я пытался обновить имя и фамилию при входе в систему через 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
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