瀏覽代碼

Merge pull request #812 from swedishborgie/postgresql

Fixes #635 - Unique constraint violation when using U2F tokens on PostgreSQL
Daniel García 5 年之前
父節點
當前提交
c0ba3406ef
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      src/db/models/two_factor.rs

+ 7 - 0
src/db/models/two_factor.rs

@@ -73,6 +73,13 @@ impl TwoFactor {
 impl TwoFactor {
     #[cfg(feature = "postgresql")]
     pub fn save(&self, conn: &DbConn) -> EmptyResult {
+        // We need to make sure we're not going to violate the unique constraint on user_uuid and atype.
+        // This happens automatically on other DBMS backends due to replace_into(). PostgreSQL does
+        // not support multiple constraints on ON CONFLICT clauses.
+        diesel::delete(twofactor::table.filter(twofactor::user_uuid.eq(&self.user_uuid)).filter(twofactor::atype.eq(&self.atype)))
+            .execute(&**conn)
+            .map_res("Error deleting twofactor for insert")?;
+
         diesel::insert_into(twofactor::table)
             .values(self)
             .on_conflict(twofactor::uuid)