feat (server): user scopes

This commit is contained in:
eneller
2026-07-23 12:11:42 +02:00
parent a3158894c8
commit 4f734fff30
3 changed files with 14 additions and 5 deletions

View File

@@ -1,8 +1,11 @@
import { Table, Column, Model, CreatedAt, DataType, Scopes} from 'sequelize-typescript'; import { Table, Column, Model, CreatedAt, DataType, Scopes, DefaultScope} from 'sequelize-typescript';
@DefaultScope(() => ({
attributes:{ exclude: ['password']}
}))
@Scopes(() => ({ @Scopes(() => ({
withoutPassword: { withPassword: {
attributes: { exclude: ['password'] } attributes: {include: ['password']}
} }
})) }))
@Table @Table

View File

@@ -2,6 +2,7 @@ import { compare } from 'bcrypt';
import express from 'express'; import express from 'express';
import { logger } from '../util/logging'; import { logger } from '../util/logging';
import User from '../model/user'; import User from '../model/user';
import { Scope } from '../util/db';
import { getJWT, requireAuth } from '../util/auth'; import { getJWT, requireAuth } from '../util/auth';
import { LoginRequest } from '../messages/Login'; import { LoginRequest } from '../messages/Login';
import { GenericMessage as Msg } from '../messages/Message'; import { GenericMessage as Msg } from '../messages/Message';
@@ -11,7 +12,7 @@ const router = express.Router();
router.post('/login', async (req, res) => { router.post('/login', async (req, res) => {
try { try {
const data : LoginRequest = req.body; const data : LoginRequest = req.body;
const user = await User.findOne({where: { userID: data.username}}); const user = await User.scope(Scope.withPassword).findOne({where: { userID: data.username}});
if (!user) return res.status(401).json(new Msg('Invalid credentials')); if (!user) return res.status(401).json(new Msg('Invalid credentials'));
const isMatch = await compare(data.password, user.password); const isMatch = await compare(data.password, user.password);
if (!isMatch) return res.status(401).json(new Msg('Invalid credentials')); if (!isMatch) return res.status(401).json(new Msg('Invalid credentials'));

View File

@@ -3,6 +3,11 @@ import { logger } from './logging';
import User from '../model/user'; import User from '../model/user';
import Transaction from '../model/transaction'; import Transaction from '../model/transaction';
enum Scope{
// for User
withPassword = 'withPassword',
}
// Initialize Sequelize // Initialize Sequelize
const db = new Sequelize({ const db = new Sequelize({
dialect: 'postgres', dialect: 'postgres',
@@ -28,4 +33,4 @@ async function testConnection() {
} }
// Export Sequelize instance and models // Export Sequelize instance and models
export { logger, db, testConnection }; export { logger, db, testConnection, Scope };