diff --git a/config.json.example b/config.json.example
deleted file mode 100644
index 1fa157c1e562f3843ef2f44bf60e1793fbf9c1e7..0000000000000000000000000000000000000000
--- a/config.json.example
+++ /dev/null
@@ -1,157 +0,0 @@
-{
-    "development":
-    {
-        "port": 3000,
-        "ip": "127.0.0.1",
-        "debug" : true,
-        "monetdb": {
-            "host": "simcaqdb3.c3sl.ufpr.br",
-            "port": 50000,
-            "dbname": "simcaq",
-            "user": "monetdb",
-            "password":"monetdb",
-            "nrConnections": "4"
-        },
-        "cdn" : {
-            "url": "http://simcaqdb3.c3sl.ufpr.br:3000",
-            "download": "https://simcaqdev.c3sl.ufpr.br/download/"
-        },
-        "mongodb" : {
-            "uri": "mongodb://localhost/dev_users"
-        },
-        "monq": {
-            "uri": "mongodb://localhost/dev_monq"
-        },
-        "default": {
-            "api": {
-                "version" : "v1"
-            },
-            "lde": {
-                "url": "http://ldedev.c3sl.ufpr.br/#"
-            },
-            "simcaq": {
-                "url": "http://simcaqdev.c3sl.ufpr.br/#"
-            }
-        },
-        "email": {
-            "host": "SMTP.office365.com",
-            "port": 587,
-            "secureConnection": false,
-            "auth": {
-                "user": "dadoseducacionais@ufpr.br",
-                "pass": "COLOCAR_A_SENHA_AQUI"
-            },
-            "tls": {
-                "ciphers": "SSLv3"
-            },
-            "from": "\"Laboratório de Dados Educacionais\" <dadoseducacionais@ufpr.br>"
-        },
-        "security": {
-            "tokenLife": 3600
-        }
-    },
-    "test":
-    {
-        "port": 3000,
-        "ip": "127.0.0.1",
-        "debug" : true,
-        "monetdb": {
-            "host": "simcaqdb3.c3sl.ufpr.br",
-            "port": 50000,
-            "dbname": "simcaq",
-            "user": "monetdb",
-            "password":"monetdb",
-            "nrConnections": "4"
-        },
-        "cdn" : {
-            "url": "http://simcaqdb3.c3sl.ufpr.br:3000",
-            "download": "https://simcaqdev.c3sl.ufpr.br/download/"
-        },
-        "mongodb" : {
-            "uri": "mongodb://localhost/test_users",
-            "secret": "SimCAQC3SL"
-        },
-        "monq": {
-            "uri": "mongodb://localhost/test_monq"
-        },
-        "default": {
-            "api": {
-                "version" : "v1"
-            },
-            "lde": {
-                "url": "http://ldedev.c3sl.ufpr.br/#"
-            },
-            "simcaq": {
-                "url": "http://simcaqdev.c3sl.ufpr.br/#"
-            }
-        },
-        "email": {
-            "host": "SMTP.office365.com",
-            "port": 587,
-            "secureConnection": false,
-            "auth": {
-                "user": "dadoseducacionais@ufpr.br",
-                "pass": "COLOCAR_A_SENHA_AQUI"
-            },
-            "tls": {
-                "ciphers": "SSLv3"
-            },
-            "from": "\"Laboratório de Dados Educacionais\" <dadoseducacionais@ufpr.br>"
-        },
-        "security": {
-            "tokenLife": 3600
-        }
-    },
-    "production":
-    {
-        "port": 3000,
-        "ip": "127.0.0.1",
-        "debug" : false,
-        "monetdb": {
-            "host": "simcaqdb3.c3sl.ufpr.br",
-            "port": 50000,
-            "dbname": "simcaq",
-            "user": "monetdb",
-            "password":"monetdb",
-            "nrConnections": "4"
-        },
-        "cdn" : {
-            "url": "http://simcaqdb3.c3sl.ufpr.br:7000",
-            "download": "https://simcaq.c3sl.ufpr.br/download/"
-        },
-        "mongodb" : {
-            "uri": "mongodb://localhost/users",
-            "secret": "SimCAQC3SL"
-        },
-        "monq": {
-            "uri": "mongodb://localhost/monq"
-        },
-        "default": {
-            "api": {
-                "version" : "v1"
-            },
-            "lde": {
-                "url": "http://lde.c3sl.ufpr.br/#"
-            },
-            "simcaq": {
-                "url": "http://simcaq.c3sl.ufpr.br/#"
-            }
-        },
-        "email": {
-            "host": "SMTP.office365.com",
-            "port": 587,
-            "secureConnection": false,
-            "auth": {
-                "user": "dadoseducacionais@ufpr.br",
-                "pass": "COLOCAR_A_SENHA_AQUI"
-            },
-            "tls": {
-                "ciphers": "SSLv3"
-            },
-            "from": "\"Laboratório de Dados Educacionais\" <dadoseducacionais@ufpr.br>"
-        },
-        "security": {
-            "tokenLife": 3600
-        }
-    }
-}
diff --git a/script_req.sh b/script_req.sh
new file mode 100755
index 0000000000000000000000000000000000000000..125204b86fb256e0608e25f161dccddb4cbc1ddc
--- /dev/null
+++ b/script_req.sh
@@ -0,0 +1,10 @@
+curl -X 'POST' \
+  'http://10.254.221.20:3000/api/v1//auth/token' \
+  -H 'accept: application/json' \
+  -H 'Content-Type: application/json' \
+  -d '{
+  "email": "eduardomsouza@ufpr.br",
+  "password": "teste123",
+  "client_secret": "LDE",
+  "grant_type": "password"
+}'
\ No newline at end of file
diff --git a/src/libs/app.js b/src/libs/app.js
index 9731038ac544b4c1f56a163104e0b8a7f5838f75..bab5e52d57d27260c16c60719855c60f4be71255 100644
--- a/src/libs/app.js
+++ b/src/libs/app.js
@@ -19,10 +19,6 @@ const api_v2 = require('./routes_v2/api');
 
 const passport = require('passport');
 
-const postgres = require(`${libs}/db/postgres`);
-
-const db = mongoose();
-
 require(`${libs}/middlewares/passport`);
 
 app.use(bodyParser.json({limit: '50mb'}));
diff --git a/src/libs/db/postgres.js b/src/libs/db/postgres.js
index 58c6d59ecb6b89e4f676ea85a0cd0bf6b9e62536..c60d28c6932491dbee5ba88a5f86412d707cda23 100644
--- a/src/libs/db/postgres.js
+++ b/src/libs/db/postgres.js
@@ -1,21 +1,8 @@
-const libs = `${process.cwd()}/libs`;
+const Sequelize = require('sequelize');
 
-const config = require(`${libs}/config`);
+// if you are using postgres, your DB URL will look like this
+const DATABASE_URL = 'postgres://postgres:postgres@localhost:5432/postgres'
 
-const log = require(`${libs}/log`)(module);
+const db = new Sequelize(DATABASE_URL)
 
-const { Pool} = require('pg');
-
-module.exports = () => {
-    
-    const pool = new Pool({
-        user: "postgres",
-        database: "postgres",
-        password: "postgres",
-        port: 5432,
-        host: "localhost",
-
-    });
-    
-    return pool;
-};
+module.exports = db
\ No newline at end of file
diff --git a/src/libs/middlewares/oauth2.js b/src/libs/middlewares/oauth2.js
index cc9a45ede4a3158bc055166202c6d20fb84a6dff..4cb6adcdb1ea2d905c56cfae85623e6023de3316 100644
--- a/src/libs/middlewares/oauth2.js
+++ b/src/libs/middlewares/oauth2.js
@@ -7,7 +7,6 @@ const libs = `${process.cwd()}/libs`;
 const config = require(`${libs}/config`);
 const log = require(`${libs}/log`)(module);
 
-const db = require(`${libs}/db/mongoose`);
 const User = require(`${libs}/models/user`);
 const AccessToken = require(`${libs}/models/accessToken`);
 const RefreshToken = require(`${libs}/models/refreshToken`);
@@ -88,7 +87,7 @@ aserver.exchange(oauth2orize.exchange.refreshToken((client, refreshToken, scope,
             return done(null, false);
         }
 
-        User.findById(token.userId, (err, user)  => {
+        User.findOne({token: token.userId} , (err, user)  => {
             if (err) { 
                 log.error(err);
                 return done(err);
diff --git a/src/libs/middlewares/passport.js b/src/libs/middlewares/passport.js
index ab895a9604072e3b77a6384ac0c0f9066dcf6753..246a95ea550e2723cc0ccce1070436997ff871a3 100644
--- a/src/libs/middlewares/passport.js
+++ b/src/libs/middlewares/passport.js
@@ -50,7 +50,7 @@ passport.use(new BearerStrategy( (accessToken, done) => {
                 return done(null, false, { msg: 'Token expired' });
             }
 
-            User.findById(token.userId, function(err, usuario) {
+            User.findOne({token: token.userId}, function(err, usuario) {
                 if (err) {
                     return done(err);
                 }
diff --git a/src/libs/models/user.js b/src/libs/models/user.js
index 4d40c4e26c518dacf10b9e55b64b83c0aeeeb622..04fcb892c346f9962014b41fa02660ce4eb13dcd 100644
--- a/src/libs/models/user.js
+++ b/src/libs/models/user.js
@@ -1,10 +1,16 @@
 const Sequelize = require("sequelize");
 const crypto = require('crypto')
+const db = require('../db/postgres.js')
 const libs = `${process.cwd()}/libs`;
 const log = require(`${libs}/log`)(module);
 
 // set up a sequelize model 
-var User = sequelize.define("User",{
+var User = db.define("User",{
+    id:{
+        type: Sequelize.STRING,
+        allowNull:false,
+        unique: true
+    },
     email: {
         type: Sequelize.STRING,
         allowNull: false,
@@ -13,16 +19,28 @@ var User = sequelize.define("User",{
             notNull: { msg: "O campo Email é obrigatório." },
         }
     },
+    password:{
+        type: Sequelize.STRING,
+        get(){
+            return () => this.getDataValue('password')
+        }
+    },
     hashed_password:{
         type: Sequelize.STRING,
         allowNull: false,
         validate: {
             notNull: { msg: "O campo Senha é obrigatório." },
+        },
+        get() {
+            return() => this.getDataValue('salt')
         }
     },
     salt: {
         type: Sequelize.STRING,
-        allowNull: false
+        allowNull: false,
+        get() {
+            return() => this.getDataValue('salt')
+        }
     },
     name:{
         type: Sequelize.STRING,
@@ -143,20 +161,39 @@ var User = sequelize.define("User",{
     {}
 );
 
+User.generateSalt = function() {
+    return crypto.randomBytes(128).toString('hex');
+}
+
 User.encryptPassword = function(password) {
     return crypto.pbkdf2Sync(password+'', this.salt, 10000, 512, 'sha512');
+}
+
+User.generateObjectId = function(){
+    var timestamp = (new Date().getTime() / 1000 | 0).toString(16);
+    return timestamp + 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function() {
+        return (Math.random() * 16 | 0).toString(16);
+    }).toLowerCase();
+}
+
+const setSaltAndPassword = user => {
+    if (user.changed('password')) {
+        user.salt = User.generateSalt()
+        user.password = User.encryptPassword(user.password())
+        this.hashed_password = this.encryptPassword(password).toString('hex');
+    }
+}
+
+const setObjectId = user => {
+   user.id = User.generateObjectId()
 };
 
-User.virtual('password').set(function(password) {
-    this._plainPassword = password+'';
-    this.salt = crypto.randomBytes(128).toString('hex');
-    this.hashed_password = this.encryptPassword(password).toString('hex');
-}).get(function() {
-    return this._plainPassword;
-});
+User.beforeCreate(setSaltAndPassword)
+User.beforeCreate(setObjectId)
+User.beforeUpdate(setSaltAndPassword)
 
-User.checkPassword = function(password) {
-    return this.encryptPassword(password).toString('hex') === this.hashed_password;
+User.prototype.checkPassword = function(enteredPassword) {
+    return User.encryptPassword(enteredPassword, this.salt()) === this.hashed_password()
 }
 
 module.exports = User; 
diff --git a/src/libs/models/verificationToken.js b/src/libs/models/verificationToken.js
index ef7e109e16364874ea7d3f4b07b6e19ce74c3eae..793ed56c86325afc0ba59f27446a33c1eb556c1f 100644
--- a/src/libs/models/verificationToken.js
+++ b/src/libs/models/verificationToken.js
@@ -1,33 +1,32 @@
-const mongoose = require('mongoose');
-const Schema = mongoose.Schema;
-const libs = `${process.cwd()}/libs`;
+const Sequelize = require("sequelize");
+const crypto = require('crypto')
+const db = require('../db/postgres.js')
 const log = require(`${libs}/log`)(module);
 const User = require(`${libs}/models/user`);
 const uuid = require('node-uuid');
 
-let VerificationToken = new Schema({
+var VerificationToken = db.define("VerificationToken",{
     userId: {
-        type: Schema.Types.ObjectId,
-        required: true,
-        ref: 'User'
+        type: Sequelize.STRING, 
+        allowNull: false
     },
-    token: {
-        type: String,
-        required: true
+    token:{
+        type: Sequelize.STRING,
+        allowNull: false
     },
-    verified: {
-        type: Boolean,
-        required: true,
+    verified:{
+        type: Sequelize.BOOLEAN,
+        allowNull: false,
         default: false
     },
-    createdAt: {
-        type: Date,
-        required: true,
+    createdAt:{
+        type: Sequelize.DATE,
+        allowNull: false,
         default: Date.now
     }
-});
+})
 
-VerificationToken.methods.createVerificationToken = function(done) {
+VerificationToken.createVerificationToken = function(done) {
     let verificationToken = this;
     let token = uuid.v4();
     verificationToken.set('token', token);
@@ -38,4 +37,6 @@ VerificationToken.methods.createVerificationToken = function(done) {
     })
 }
 
-module.exports = mongoose.model('VerificationToken', VerificationToken);
+VerificationToken.belongsTo(User);
+
+module.exports = VerificationToken;
diff --git a/src/libs/routes_v1/resetToken.js b/src/libs/routes_v1/resetToken.js
index 34ece8455adf7b77208dc200a95641ed04638609..faa4caa6de3bebeb9b92ad2394456d0b8bcae905 100644
--- a/src/libs/routes_v1/resetToken.js
+++ b/src/libs/routes_v1/resetToken.js
@@ -32,7 +32,7 @@ resetTokenApp.get('/:token', (req, res, next) => {
             })
             return next({msg: 'Token expired', status: 410});
         }
-        User.findById(rToken.userId, (err, user) => {
+        User.findOne({token: rToken.userId}, (err, user) => {
             if(err) {
                 log.error(err);
                 next(err);
@@ -55,7 +55,7 @@ resetTokenApp.post('/:token', (req, res, next) => {
             res.statusCode = 404;
             return next({msg: 'Token not found', status:404});
         }
-        User.findById(rToken.userId, (err, user) => {
+        User.findOne({token: rToken.userId}, (err, user) => {
             if(err) {
                 log.error(err);
                 next(err);
diff --git a/src/libs/routes_v1/user.js b/src/libs/routes_v1/user.js
index 7ff088eea62f34ffd3b66de4a28ae42807a97e8d..951717d72318e3093c51e14b484c74820d6befa3 100644
--- a/src/libs/routes_v1/user.js
+++ b/src/libs/routes_v1/user.js
@@ -100,7 +100,7 @@ userApp.get('/me', passport.authenticate('bearer', { session: false }), (req, re
 }, response('user'));
 
 userApp.get('/:id', (req, res, next) => {
-  User.findById(req.params.id, (err, user) => {
+  User.findOne({id: req.params.id}, (err, user) => {
     if(err) {
       log.error(err);
       return next(err);
@@ -161,7 +161,7 @@ userApp.post('/', (req, res, next) => {
 
       // Create verification token
       let verificationToken = new VerificationToken({
-        userId: user._id
+        userId: user.id
       });
 
       verificationToken.createVerificationToken((err, token) => {
@@ -195,7 +195,7 @@ userApp.post('/', (req, res, next) => {
 });
 
 userApp.put('/:id', passport.authenticate('bearer', { session: false }), (req, res, next) => {
-  User.findById(req.params.id, (err, user) => {
+  User.findOne({id:req.params.id}, (err, user) => {
     if (err) {
       log.error(err);
       return next({err});
diff --git a/src/libs/routes_v1/verifyToken.js b/src/libs/routes_v1/verifyToken.js
index d54f64aa162c767c765784398dbcab455a9d666e..ecb834b35931d648d29825791dbe92ee253014e6 100644
--- a/src/libs/routes_v1/verifyToken.js
+++ b/src/libs/routes_v1/verifyToken.js
@@ -22,7 +22,7 @@ verifyTokenApp.get('/:token', (req, res, next) => {
             res.statusCode = 404;
             return next({msg: 'Token not found', status:404});
         }
-        User.findById(vToken.userId, (err, user) => {
+        User.findOne({token:vToken.userId}, (err, user) => {
             if(err) {
                 log.error(err);
                 next(err);