更新数据库中的现有用户数据

用户名

目前,我已经设法将用户信息保存在数据库中。但是,如果Steam数据库中的信息发生更改,我想在他们登录时更新数据库中的用户信息。因此,在我的数据库中相同。

以下是我的用户架构中的信息示例

const UserSchema = mongoose.Schema({
  username:{
    type: String,
  },
  profileURL:{
    type: String,
  },
  profileImageURL:{
    type: String,
  },
  steamId:{
    type: String,
  }
});

以下是我的app.js的示例。当用户登录时,我检查了数据库中是否存在用户steamId,我想更新用户信息,例如用户名,profileURL,profileImageURL及其SteamID(如果存在),否则我将在数据库中创建一个新用户。我该如何实现?目前,我只是返回完成(空,用户)。

passport.use(new SteamStrategy({
    returnURL: 'http://localhost:3000/auth/steam/return',
    realm: 'http://localhost:3000/',
    apiKey: ''
    }, 
    function (identifier, done){
        var steamId = identifier.match(/\d+$/)[0];
        var profileURL = 'http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=' + 'api_Key' + '&steamids=' + steamId;

        User.findOne({ steamId: steamId}, function(err, user){
            if(user){
                return done(null, user); 
            }
            else{
                request(profileURL, function (error, response, body){
                    if (!error && response.statusCode === 200) 
                    {
                        var data = JSON.parse(body);
                        var profile = data.response.players[0];
                        var user = new User();
                        user.username = profile.personaname;
                        user.profileURL = profile.profileurl;
                        user.profileImageURL = profile.avatarfull;
                        user.steamId = steamId;
                        user.save(function(err){
                            done(err, user);
                        });
                    }
                    else
                    {
                        done(err, null);
                    }
                });
            }
        });
}));
埃迪·迪恩

您可以通过启用upsert的更新调用来执行此操作。尝试这样的事情:

        request(profileURL, function(err, response, body){
          var data = JSON.parse(body);
          var user = {
          //... construct user object
          }
          
          User.findOneAndUpdate({ steamId: steamId }, user, {upsert: true, new: true, setDefaultsOnInsert: true}, function(err, newUser){
            if (err) return handleError(err);
            done(null, newUser);
          });
        });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用单独的现有用户数据库进行 Django 登录

使用MVC5中的现有用户数据库进行复杂身份验证

具有用户数据和中央数据库更新的数据库设计

保存到数据库中返回所有用户数据,包括编码密码

Facebook登录到现有的用户数据库,并访问令牌

如何通过PHP使用现有的Drupal 7用户数据库

我已经使用了数据库参考,那么为什么我要将所有用户数据都放入recyclerview中,而我只希望将一个用户数据放入recyclerview中?

带有标签的用户数据库

限制Firebase Realtime数据库中的用户数

在Visual Studio ASP.NET中没有更新用户数据库的选项

如何在.ejs文件上显示所有用户数据库(mongodb)详细信息

单用户数据库与多用户数据库

Realm如何将现有用户数据添加到移动平台?

将用户数据库连接保存在我的数据库中

加密用户数据及其数据库

Firestore - 删除所有用户数据

没有用户数据的系统备份

在登录时发布所有用户数据

Firebase访问所有用户数据

Laravel 4-用户只能访问多用户数据库中的数据

用户数据有一半没有插入数据库

Laravel 5.2-如何从具有不同表格式的外部数据库中复制用户数据

无法使用Android中的自定义列更新解析用户数据库

从Firebase实时数据库中删除用户数据

用户数据未正确创建或未正确插入Firebase数据库中

如何将Facebook用户数据转换为数据库中的记录?

验证后如何将用户数据存储到Firbase数据库中?

用户数据未保存到其数据库中

微服务 - 将用户数据存储在单独的数据库中