Skip to content

Commit 121ef87

Browse files
committed
fix: user serialize
2 parents 6cc1525 + 4835503 commit 121ef87

20 files changed

+660
-354
lines changed

Diff for: .eslintrc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
"jest/no-identical-title": "error",
5050
"jest/prefer-to-have-length": "warn",
5151
"jest/valid-expect": "error",
52-
"no-underscore-dangle": ["error", { "allow": ["_id"] }],
52+
"no-underscore-dangle": ["error", { "allow": ["_id", "_json"] }],
5353
"@typescript-eslint/no-misused-promises": [
5454
"error",
5555
{

Diff for: package.json

+11-11
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,40 @@
1616
"dependencies": {
1717
"argon2": "^0.28.5",
1818
"bson": "^4.6.4",
19+
"connect-mongo": "^4.6.0",
1920
"cookie-parser": "^1.4.6",
21+
"cors": "^2.8.5",
2022
"cross-env": "^7.0.3",
2123
"dotenv": "^16.0.1",
2224
"express": "^4.18.1",
2325
"express-session": "^1.17.3",
2426
"helmet": "^5.1.0",
27+
"lodash": "^4.17.21",
28+
"mongodb": "^4.7.0",
29+
"mongoose": "^6.4.0",
2530
"passport": "^0.6.0",
2631
"passport-github": "^1.1.0",
2732
"passport-google-oauth20": "^2.0.0",
2833
"passport-kakao": "^1.0.1",
29-
"passport-local": "^1.0.0",
30-
"lodash": "^4.17.21",
31-
"mongodb": "^4.7.0",
32-
"mongoose": "^6.4.0"
34+
"passport-local": "^1.0.0"
3335
},
3436
"devDependencies": {
35-
"@types/express-session": "^1.17.4",
3637
"@shelf/jest-mongodb": "^3.0.2",
38+
"@types/connect-mongo": "^3.1.3",
3739
"@types/cookie-parser": "^1.4.3",
40+
"@types/cors": "^2.8.12",
3841
"@types/express": "^4.17.13",
42+
"@types/express-session": "^1.17.4",
3943
"@types/jest": "^28.1.4",
4044
"@types/lodash": "^4.14.182",
4145
"@types/mongodb": "^4.0.7",
4246
"@types/mongoose": "^5.11.97",
4347
"@types/node": "^18.0.0",
4448
"@types/passport": "^1.0.9",
45-
"@types/passport-local": "^1.0.34",
4649
"@types/passport-github": "^1.1.7",
4750
"@types/passport-google-oauth20": "^2.0.11",
4851
"@types/passport-kakao": "^1.0.0",
52+
"@types/passport-local": "^1.0.34",
4953
"@typescript-eslint/eslint-plugin": "^5.29.0",
5054
"@typescript-eslint/parser": "^5.29.0",
5155
"eslint": "^7.32.0 || ^8.2.0",
@@ -61,11 +65,7 @@
6165
"ts-node-dev": "^2.0.0",
6266
"tsc-alias": "^1.6.11",
6367
"tsconfig-paths": "^4.0.0",
64-
"typescript": "^4.7.4",
65-
"helmet": "^5.1.0",
66-
"lodash": "^4.17.21",
67-
"mongodb": "^4.7.0",
68-
"mongoose": "^6.4.0"
68+
"typescript": "^4.7.4"
6969
},
7070
"lint-staged": {
7171
"src/**/*.ts": "eslint --fix",

Diff for: src/controllers/auth.ts

+21-17
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,34 @@
1+
/* eslint-disable consistent-return */
12
import { NextFunction, Request, Response } from 'express';
23
import passport from 'passport';
34
import * as CONSTS from '@/utils/consts';
5+
import { isCompany, UserModel } from '@/interfaces/auth';
46

5-
export const signup = async (req: Request, res: Response) => {
7+
export const logout = (req: Request, res: Response) => {
68
try {
7-
if (req.isAuthenticated()) {
8-
res.sendStatus(403);
9-
return;
10-
}
11-
// TODO
12-
const result = undefined;
13-
res.json(result);
9+
req.logout((err) => {
10+
if (err) { return console.log(err); }
11+
res.redirect('/');
12+
});
1413
} catch (err) {
1514
console.log(err);
1615
}
1716
};
18-
1917
export const localLogin = [
2018
(req: Request, res: Response, next: NextFunction) => {
2119
if (req.isAuthenticated()) {
22-
res.sendStatus(403);
20+
res.status(403).json({ reason: 'ALREADY LOGIN' });
2321
} else {
2422
next();
2523
}
2624
},
27-
passport.authenticate('local', { failureRedirect: CONSTS.LOGIN_FAILURE_REDIRECT }),
25+
passport.authenticate('local', { successRedirect: CONSTS.LOGIN_SUCCESS_REDIRECT, failureRedirect: CONSTS.LOGIN_FAILURE_REDIRECT }),
2826
];
2927

3028
export const googleLogin = [
3129
(req: Request, res: Response, next: NextFunction) => {
3230
if (req.isAuthenticated()) {
33-
res.sendStatus(403);
31+
res.status(403).json({ reason: 'ALREADY LOGIN' });
3432
} else {
3533
next();
3634
}
@@ -46,23 +44,20 @@ export const googleLogin = [
4644
export const kakaoLogin = [
4745
(req: Request, res: Response, next: NextFunction) => {
4846
if (req.isAuthenticated()) {
49-
res.sendStatus(403);
47+
res.status(403).json({ reason: 'ALREADY LOGIN' });
5048
} else {
5149
next();
5250
}
5351
},
5452
passport.authenticate('kakao', {
5553
successRedirect: CONSTS.LOGIN_SUCCESS_REDIRECT, failureRedirect: CONSTS.LOGIN_FAILURE_REDIRECT, scope: ['profile_nickname', 'account_email'],
5654
}),
57-
(req: Request, res: Response) => {
58-
res.json({ success: true });
59-
},
6055
];
6156

6257
export const githubLogin = [
6358
(req: Request, res: Response, next: NextFunction) => {
6459
if (req.isAuthenticated()) {
65-
res.sendStatus(403);
60+
res.status(403).json({ reason: 'ALREADY LOGIN' });
6661
} else {
6762
next();
6863
}
@@ -74,3 +69,12 @@ export const githubLogin = [
7469
res.json({ success: true });
7570
},
7671
];
72+
73+
export const getSessionUser = (req: Request, res: Response) => {
74+
if (req.user) {
75+
res.send({
76+
type: req.user?.type,
77+
...req.user?.userData,
78+
});
79+
}
80+
};

Diff for: src/controllers/company.ts

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Request, Response, NextFunction } from 'express';
2+
import * as CompanyService from '@/services/auth/company';
3+
import { CompanySignup } from '@/interfaces/auth';
4+
5+
export async function get(req: Request<{ id: string }>, res: Response, next: NextFunction) {
6+
try {
7+
const result = await CompanyService.get(req.params.id);
8+
res.json(result);
9+
} catch (err) {
10+
next(err);
11+
}
12+
}
13+
14+
export async function create(
15+
req: Request<Record<string, never>, Record<string, never>, { data: CompanySignup }>,
16+
res: Response,
17+
next: NextFunction,
18+
) {
19+
try {
20+
const result = await CompanyService.create({
21+
name: req.body.data.username,
22+
username: req.body.data.username,
23+
password: req.body.data.password,
24+
level: req.body.data.level,
25+
});
26+
res.json(result);
27+
} catch (err) {
28+
next(err);
29+
}
30+
}

Diff for: src/controllers/team.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,10 @@ export async function addUser(
6565
) {
6666
try {
6767
if (req.isAuthenticated()) {
68-
const result = await TeamService.addUser(req.params.id, req.user.id); // todo - user id type
68+
const result = await TeamService.addUser(
69+
req.params.id,
70+
req.user.userData.id,
71+
); // todo - user id type
6972
res.json(result);
7073
} else {
7174
throw new Error('Unauthenticated User');

Diff for: src/index.ts

+22-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
1+
/* eslint-disable @typescript-eslint/no-unsafe-call */
2+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
13
import express from 'express';
24
import helmet from 'helmet';
35
import http from 'http';
4-
import cookieParser from 'cookie-parser';
56
import mongoose from 'mongoose';
7+
import MongoStore from 'connect-mongo';
68
import dotenv from 'dotenv';
7-
import router from '@/routes';
89
import session from 'express-session';
910
import passport from 'passport';
10-
import * as Passport from './utils/passport';
1111

12+
import router from '@/routes';
13+
import * as Passport from '@/utils/passport';
14+
15+
declare module 'express-session' {
16+
interface SessionData {
17+
passport: any;
18+
}
19+
}
1220
if (process.env.NODE_ENV === 'development') {
1321
dotenv.config({
1422
path: '.env',
@@ -46,15 +54,20 @@ async function expressLoader() {
4654
// parsers
4755
app.use(express.json());
4856
app.use(express.urlencoded({ extended: true }));
49-
app.use(cookieParser());
5057

51-
app.use(router);
5258
// app.use(errorHandler); // todo - error handler
53-
59+
app.enable('trust proxy');
5460
app.use(session({
61+
cookie: {
62+
secure: false,
63+
httpOnly: false,
64+
maxAge: 3 * 24 * 60 * 60 * 1000, // 3 day
65+
// sameSite: 'none',
66+
},
5567
secret: process.env.SESSION_SECRET_KEY!,
56-
resave: true,
57-
saveUninitialized: true,
68+
resave: false,
69+
saveUninitialized: false,
70+
store: MongoStore.create({ mongoUrl: process.env.MONGO_HOST }),
5871
}));
5972

6073
app.use(passport.initialize());
@@ -66,6 +79,7 @@ async function expressLoader() {
6679
passport.serializeUser(Passport.serialize);
6780
passport.deserializeUser(Passport.deserialize);
6881

82+
app.use(router);
6983
app.all('*', (_, res) => {
7084
res.status(404).json({ error: { message: 'URL Not Found' } });
7185
});

Diff for: src/interfaces/auth.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ export interface User {
3131
export interface Company {
3232
name: string;
3333
profile?: Profile;
34+
level: number;
3435
}
3536

3637
// fields that not be shown
3738
export interface CompanySignup extends Company {
3839
username: string;
3940
password: string;
40-
level: number;
4141
}
4242

4343
export interface UserModel extends User {

Diff for: src/interfaces/passport.d.ts

+12-14
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
import { UserModel as UserType, CompanyModel as CompanyType } from '@/interfaces/auth';
2-
import { Request } from 'express';
1+
import { GeneralUser } from '@/interfaces/auth';
32

43
declare global {
5-
namespace Express {
6-
// eslint-disable-next-line @typescript-eslint/no-empty-interface
7-
interface AuthInfo {}
8-
// eslint-disable-next-line @typescript-eslint/no-empty-interface
9-
interface User extends UserType, CompanyType {}
10-
// type User = UserType | CompanyType
4+
namespace Express {
5+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
6+
interface AuthInfo {}
7+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
8+
interface User extends GeneralUser {}
119

12-
interface Request {
10+
interface Request {
1311
authInfo?: AuthInfo | undefined;
1412
user?: User | undefined;
1513

@@ -28,14 +26,14 @@ declare global {
2826
isAuthenticated(): this is AuthenticatedRequest;
2927
// eslint-disable-next-line no-use-before-define
3028
isUnauthenticated(): this is UnauthenticatedRequest;
31-
}
29+
}
3230

33-
interface AuthenticatedRequest extends Request {
31+
interface AuthenticatedRequest extends Request {
3432
user: User;
35-
}
33+
}
3634

37-
interface UnauthenticatedRequest extends Request {
35+
interface UnauthenticatedRequest extends Request {
3836
user?: undefined;
39-
}
37+
}
4038
}
4139
}

0 commit comments

Comments
 (0)