'sqlite database is not storing multiple users

Im trying to save the google users to my sqlite database. But for some reason it wont store more records after the first and every new login just inherits information from the stored user instead of giving new information. So its not like the new record is overwriting the old record either, its just inheriting its information.

usermodel.js

//initialize sequelize
const { Sequelize, DataTypes } = require('sequelize');

const sequelize = new Sequelize ({
  dialect: 'sqlite',
  storage: './database.sqlite',
});

//check sequelize connection
sequelize.authenticate().then(() => {
  console.log('*********************************************\nConnection has been established successfully.\n*********************************************');
}).catch((error) => {
  console.error('*********************************************\nUnable to connect to the database:\n*********************************************', error);
});

const User = sequelize.define('user', {
  name: {
      type: DataTypes.STRING,
      allowNull: false,
   },
  googleId: {
      type: DataTypes.STRING,
      allowNull: false,
      primaryKey: true
  },
  role: {
    type: DataTypes.STRING,
    allowNull: false,
    defaultValue: 'casual'
},
}, {
freezeTableName: true,
timestamps: false,
});


//User.drop();

User.sync({alter: true}).then(() => {
  console.log('******************************************\nTable and model synced successfully\n*********************************************');
  //const user = User.build({name: 'juantan', googleId: '2'})
  //user.save();
}).catch((error) => {
  console.log('*******************************************\nError Syncing the table and model\n*********************************************')
});

module.exports = User;

passport-setup.js

const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20');
const keys = require('./keys');
const User = require('./usermodel');

passport.serializeUser((user, done) => {
    done(null, user.googleId);
});

passport.deserializeUser((googleId, done) => {
    User.findByPk(googleId).then((user) => {
        done(null, user);
    });
});

passport.use(
    new GoogleStrategy({
        //options for the strategy
        callbackURL: '/redirect/',
        clientID: keys.google.clientID,
        clientSecret: keys.google.clientSecret,
    }, (accessToken, refreshToken, profile, done) => {
        //check if user that is logging in exists in db
            User.findOne({googleId: profile.id}).then((currentUser)=> {
                //if exists
                if(currentUser) {
                    console.log('User is', currentUser);
                    done(null, currentUser)
                } else  {
                    //otherwise store new logged in user in db
                    new User({
                        name: profile.displayName,
                        googleId: profile.id
                    }).save().then((newUser) => {
                        console.log('new user created: ' + newUser);
                        done(null, newUser); 
                    })

                }      
            })
    })
)


login & auth routes:

/*LOGIN ROUTES & AUTHENTICATION**********************************************************************************************************/

// auth login
routes.get('/login', (req, res) => {
    res.render('login', {user: req.user}) //allows us to send req.user to login.ejs so that we can retrieve information from the current session
})

//authorize with google
routes.get('/google', passport.authenticate('google', {
    scope: ['profile']
}));

//callback route for google to redirect to
routes.get('/redirect', passport.authenticate('google'), (req, res) => {
    res.redirect('/profile/');
})

// auth logout
routes.get('/logout', (req, res) => {
    req.logout();
    res.redirect('/login');
    console.log('user logged out.');
});

I don't know if this is related but when i run my code sequelize performs multiple old tasks. Here is the output:

[nodemon] starting `node index.js`
Server is running on port: 3000
Executing (default): CREATE TABLE IF NOT EXISTS `user` (`name` VARCHAR(255) NOT NULL, `googleId` VARCHAR(255) NOT NULL PRIMARY KEY, `role` VARCHAR(255) NOT NULL DEFAULT 'casual');
Executing (default): SELECT 1+1 AS result
Executing (default): PRAGMA TABLE_INFO(`user`);
Executing (default): PRAGMA foreign_key_list(`user`)
*********************************************
Connection has been established successfully.
*********************************************
Executing (default): PRAGMA INDEX_LIST(`user`)
Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_user_1`)
Executing (default): PRAGMA foreign_key_list(`user`)
Executing (default): PRAGMA TABLE_INFO(`user`);
Executing (default): PRAGMA INDEX_LIST(`user`)
Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_user_1`)
Executing (default): PRAGMA foreign_key_list(`user`)
Executing (default): CREATE TABLE IF NOT EXISTS `user_backup` (`name` VARCHAR(255) NOT NULL, `googleId` VARCHAR(255) NOT NULL UNIQUE PRIMARY KEY, `role` VARCHAR(255) NOT NULL DEFAULT 'casual');
Executing (default): INSERT INTO `user_backup` SELECT `name`, `googleId`, `role` FROM `user`;
Executing (default): DROP TABLE `user`;
Executing (default): CREATE TABLE IF NOT EXISTS `user` (`name` VARCHAR(255) NOT NULL, `googleId` VARCHAR(255) NOT NULL UNIQUE PRIMARY KEY, `role` VARCHAR(255) NOT NULL DEFAULT 'casual');
Executing (default): INSERT INTO `user` SELECT `name`, `googleId`, `role` FROM `user_backup`;
Executing (default): DROP TABLE `user_backup`;
Executing (default): PRAGMA TABLE_INFO(`user`);
Executing (default): PRAGMA INDEX_LIST(`user`)
Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_user_1`)
Executing (default): PRAGMA foreign_key_list(`user`)
Executing (default): CREATE TABLE IF NOT EXISTS `user_backup` (`name` VARCHAR(255) NOT NULL, `googleId` VARCHAR(255) NOT NULL UNIQUE PRIMARY KEY, `role` VARCHAR(255) NOT NULL DEFAULT 'casual');
Executing (default): INSERT INTO `user_backup` SELECT `name`, `googleId`, `role` FROM `user`;
Executing (default): DROP TABLE `user`;
Executing (default): CREATE TABLE IF NOT EXISTS `user` (`name` VARCHAR(255) NOT NULL, `googleId` VARCHAR(255) NOT NULL UNIQUE PRIMARY KEY, `role` VARCHAR(255) NOT NULL DEFAULT 'casual');
Executing (default): INSERT INTO `user` SELECT `name`, `googleId`, `role` FROM `user_backup`;
Executing (default): DROP TABLE `user_backup`;
Executing (default): PRAGMA INDEX_LIST(`user`)
Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_user_1`)
******************************************
Table and model synced successfully
*********************************************
Executing (default): SELECT `name`, `googleId`, `role` FROM `user` AS `user` WHERE `user`.`googleId` = '106821645313041732428';
Executing (default): SELECT `name`, `googleId`, `role` FROM `user` AS `user` WHERE `user`.`googleId` = '106821645313041732428';
Executing (default): SELECT `name`, `googleId`, `role` FROM `user` AS `user` WHERE `user`.`googleId` = '106821645313041732428';
Executing (default): SELECT `name`, `googleId`, `role` FROM `user` AS `user` WHERE `user`.`googleId` = '106821645313041732428';
(sequelize) Warning: Model attributes (googleId) passed into finder method options of model user, but the options.where object is empty. Did you forget to use options.where?
Executing (default): SELECT `name`, `googleId`, `role` FROM `user` AS `user` LIMIT 1;


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source