1. ホーム
  2. database

[解決済み] SequelizeでfindOrCreateを使う方法

2022-02-02 19:15:07

質問

Sequelize初心者です。 TwitterやFacebookでoAuth認証を行い、ユーザー情報をデータベースに保存したいのですが、どのようにすればよいのでしょうか?

しかし、OAuth認証が複数のサイトで行われる場合、以下のような情報が漏れてしまうという問題があります。 userid に登録されたものが、他のサイトと衝突してしまう。

これを回避するために、指定した userid がすでにデータベースに存在しない場合。

やはり、Sequelizeの findOrCreate を使用することができますが、私はその方法を知りません。 findOrCreate . upsertの使い方は知っているので、その上で findOrCreate 下記のupsertの説明のように。しかし、このような条件分岐を行いたいのです。

if (userid! = "○○○" && username! = "○○○") .

User.upsert({
  userid:    profile.id,
  username:  profile.username,
  accountid: c + 1,
}).then(() => {
  done(null, profile);
});

どうすればいいのでしょうか?

解決方法は?

// remember to use a transaction as you are not sure whether the user is
// already present in DB or not (and you might end up creating the user -
// a write operation on DB)

models.sequelize.transaction(function(t) {
  return models.users.findOrCreate({
    where: {
      userId:    profile.userId,
      name:      profile.name
    },
    transaction: t
  })
  .spread(function(userResult, created){
    // userResult is the user instance

    if (created) {
      // created will be true if a new user was created
    }
  });
});