liamcurry/passport-steam

[question] Help with Storing

haziqfiqri opened this issue · 3 comments

Trying to update steam user to User schema if exist, otherwise create new steam user in mongodb. But got an error below, how do I solve this?

ValidationError: User validation failed: imageURL: Path `imageURL` is required., username: Path
`username` is required., profileURL: Path `profileURL` is required.
const UserSchema = mongoose.Schema({
  username:{
    type: String,
    required: true
  },
  profileURL:{
    type: String,
    required: true
  },
  imageURL:{
    type: String,
    required: true
  },
  steamId:{
    type: String,
    required: true
  }
});
const User = module.exports = mongoose.model('User', UserSchema);
const User = require('./models/user');

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

        User.findOne({ steamId: steamId}, function(err, user){
            if(user){
                User.update({ steamid }, {
                    $set: profile
                }, {
                    upsert: true
                }, (err) => {
                    if (err) {
                        console.log(err);
                    }
                });
            }
            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.personame;
                        user.profileURL = profile.profileURL;
                        user.profileImageURL = profile.avatarmedium;
                        user.steamId = steamId;
                    
                        user.save(function(err){
                            done(err, user);
                        });
                    }
                    else{
                        done(err, null);
                    }
                });
            }
        });
}));

Solved it, i think because my model schema are set to required:true. However in my views, steam username and steam image are not showing anything. I insert also the output of mongo shell after trying to login as new user.

extends layout

block content
    h1 Steam Profile
    br
    img.img-thumbnail(src='#{user.imageURL}')
    br
    | 
    h5 Username: #{user.username} 
    h5 Id: #{user.steamId}
    hr
        "_id" : ObjectId("5da7a4a66910d33f74069d83"),
        "steamId" : "76561198044179316",
        "__v" : 0

Okay nvm, it was just typos. Sorry my bad, haven't sleep for awhile. Thanks!

Out of curiosity were you using Joi for input validation?
I know in recent versions Joi.validate is no longer a valid function,
I am going to be trying to setup something similar with mongoose, Joi, and express to track my communities bans as well as to check for VAC / Community bans on our community.