Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

after .write() new values can't be read #449

Closed
Stavtastic opened this issue Mar 10, 2021 · 2 comments
Closed

after .write() new values can't be read #449

Stavtastic opened this issue Mar 10, 2021 · 2 comments

Comments

@Stavtastic
Copy link

Stavtastic commented Mar 10, 2021

Hi,

Adding a user to the lowdb works fine. The registration function works. I see the user in db.json.
db.get('users').push({ email: email, password: hash}).write();

However when trying to access the file in another function, the values retrieved are from an old state of the database. see sample code:

const bcrypt = require('bcrypt');
const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');

module.exports = function(passport){
    let adapter = new FileSync('db.json');
    let db = low(adapter);
    passport.use(
        new LocalStrategy({usernameField: 'email'},(email,password,done)=>{

            let user = db.get('users').find({ email: email }).value();

            if (user == null) {
                return done(null,false,{message:'email not registered'});
            }
            //match passwords
            bcrypt.compare(password,user.password,(err,isMatch)=>{
                if(err) throw err;
                if(isMatch){
                    return done(null,user.email);
                } else{
                    return done(null,false,{message: 'password incorrect'});
                }
            })
        })
    );
    passport.serializeUser(function(user,done) {
        //console.log('serialize: ' + user)
        done(null,user);
    });
    passport.deserializeUser(function(user,done){
        //console.log('deserialize: ' + user)
        // User.findById(id,function(err,user){
        //     done(err,user);
        // })
        return done(null, user)
    })
};

How can I ensure the file sync works over all my .js files and is using the most recent state change.

@Stavtastic
Copy link
Author

I solved this issue by moving the code a bit (though I find it a bit hacky to do it this way, if anyone knows a better option, please let me know)

const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
const low = require('lowdb');
const FileAsync = require('lowdb/adapters/FileSync');

module.exports = function(passport){
    passport.use(
        new LocalStrategy({usernameField: 'email'},(email,password,done)=>{
            let adapter = new FileAsync('db.json');
            let db = low(adapter);
            let user = db.get('users').find({ email: email }).value();
            //console.log("passport user: " + user.email);
            if (user == null) {
                return done(null,false,{message:'email not registered'});
            }
            //match passwords
            bcrypt.compare(password,user.password,(err,isMatch)=>{
                if(err) throw err;
                if(isMatch){
                    return done(null,user.email);
                } else{
                    return done(null,false,{message: 'password incorrect'});
                }
            })
        })
    );
    passport.serializeUser(function(user,done) {
        console.log('serialize: ' + user)
        done(null,user);
    });
    passport.deserializeUser(function(user,done){
        //console.log('deserialize: ' + user)
        // User.findById(id,function(err,user){
        //     done(err,user);
        // })
        return done(null, user)
    })
};

@typicode
Copy link
Owner

typicode commented May 21, 2021

Thanks for the update 👍
Closing as v2 API is different.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants