Skip to content

Commit 6d481b2

Browse files
committedOct 27, 2019
autorized middleware
1 parent 0f64888 commit 6d481b2

11 files changed

+75
-104
lines changed
 

‎.eslintrc.js

+19-28
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,20 @@
11
module.exports = {
2-
"env": {
3-
"es6": true,
4-
"node": true
5-
},
6-
"extends": [
7-
"airbnb-base",
8-
"eslint:recommended"
9-
],
10-
"globals": {
11-
"Atomics": "readonly",
12-
"SharedArrayBuffer": "readonly"
13-
},
14-
"parserOptions": {
15-
"ecmaVersion": 2018
16-
},
17-
"rules": {
18-
"no-unused-vars": "warn",
19-
"no-console": "off",
20-
"no-undef": "off",
21-
"consistent-return": "off",
22-
"radix": "off",
23-
"global-require": "off",
24-
"no-continue": "off",
25-
"import/no-dynamic-require": "off",
26-
"no-restricted-syntax": "off",
27-
"no-plusplus": "off"
28-
}
29-
};
2+
env: {
3+
commonjs: true,
4+
es6: true,
5+
node: true
6+
},
7+
extends: 'eslint:recommended',
8+
globals: {
9+
Atomics: 'readonly',
10+
SharedArrayBuffer: 'readonly'
11+
},
12+
parserOptions: {
13+
ecmaVersion: 2018
14+
},
15+
rules: {
16+
'no-unused-vars': 'warn',
17+
'no-console': 'off',
18+
'no-undef': 'off'
19+
}
20+
};

‎app.js

+12-9
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ const getRoutes = require('./lib/getRoutes');
1111

1212
const routes = getRoutes();
1313

14-
app.use(cors({
15-
origin: process.env.NODE_ENV === 'development' ? '*' : 'surfspace.me',
16-
}));
14+
app.use(
15+
cors({
16+
origin: process.env.NODE_ENV === 'development' ? '*' : 'surfspace.me'
17+
})
18+
);
1719
app.use(bodyParser.json({ extended: true }));
1820

19-
routes.forEach((data) => {
21+
routes.forEach(data => {
2022
app.use(data.path || '/', data.router);
2123
});
2224

@@ -27,19 +29,20 @@ app.use(() => {
2729
});
2830
// Error 처리 핸들러
2931

30-
app.use((error, req, res, next) => {
32+
app.use((error, req, res) => {
3133
const status = error.status || 500;
32-
const message = error.message && error.expose
33-
? error.message
34-
: 'An error has occurred. Please Try Again.';
34+
const message =
35+
error.message && error.expose
36+
? error.message
37+
: 'An error has occurred. Please Try Again.';
3538

3639
if (!error.expose) {
3740
console.error(error);
3841
}
3942

4043
res.status(status).json({
4144
status,
42-
message,
45+
message
4346
});
4447
});
4548

‎lib/middlewares/auth.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const jwt = require('jsonwebtoken');
2+
3+
exports.authroized = (req, res, next) => {
4+
let token;
5+
try {
6+
token = req.headers['x-access-token'];
7+
} catch (e) {
8+
return throwError('필수 항목이 입력되지 않았습니다.', 400);
9+
}
10+
try {
11+
jwt.verify(token, settings.TOKEN_KEY || 'jwt');
12+
next();
13+
} catch (e) {
14+
return throwError('올바른 토큰이 아닙니다.', 403);
15+
}
16+
};

‎lib/sendLog.js

-41
This file was deleted.

‎lib/verifyToken.js

-1
This file was deleted.

‎package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"socket.io": "^2.3.0"
2121
},
2222
"scripts": {
23-
"dev": "NODE_ENV=development nodemon index.js",
23+
"dev": "NODE_ENV=development nodemon index.js --exec \"yarn run lint && node\"",
2424
"server": "nodemon index.js",
2525
"test": "NODE_ENV=test mocha",
2626
"lint": "eslint . --fix"
@@ -31,6 +31,7 @@
3131
"eslint-config-airbnb": "^18.0.1",
3232
"eslint-plugin-import": "^2.18.2",
3333
"mocha": "^6.2.2",
34+
"prettier": "1.18.2",
3435
"supertest": "^4.0.2"
3536
}
36-
}
37+
}

‎prettier.config.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
tabWidth: 2,
3+
semi: true,
4+
singleQuote: true,
5+
};

‎routes/auth/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ router.post('/', (req, res) => {
2424
userId: req.body.uid,
2525
username: req.body.name,
2626
};
27-
const result = jwt.sign(payload, req.body.uid, {
27+
const result = jwt.sign(payload, settings.TOKEN_KEY || 'jwt', {
2828
expiresIn: tokenExpireTime,
2929
issuer: 'surfspace.me',
3030
});

‎routes/user/index.js

+10-19
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ const util = require('util');
66
const router = express.Router();
77
const crypto = require('crypto');
88
const bodyParser = require('body-parser');
9-
const jwt = require('jsonwebtoken');
109
const throwError = require('../../lib/throwError');
11-
const sendLog = require('../../lib/sendLog');
1210
const phoneCert = require('../../lib/PhoneCertToken');
1311
const User = require('../../models/user');
12+
const auth = require('../../lib/middlewares/auth');
1413

1514
require('dotenv').config();
1615

@@ -27,7 +26,7 @@ router.post('/', async (req, res, next) => {
2726
nickname,
2827
email,
2928
interest,
30-
address,
29+
address
3130
} = req.body;
3231
// promisify
3332
const randomBytes = util.promisify(crypto.randomBytes);
@@ -39,7 +38,7 @@ router.post('/', async (req, res, next) => {
3938
buf.toString('base64'),
4039
100000,
4140
64,
42-
'sha512',
41+
'sha512'
4342
);
4443

4544
const Ukey = buf.toString('base64');
@@ -48,13 +47,13 @@ router.post('/', async (req, res, next) => {
4847
const testKey = await pbkdf2(password, Ukey, 100000, 64, 'sha512');
4948
if (Upw !== testKey.toString('base64')) {
5049
return throwError('암호화 도중 검증에 실패했습니다.', 500, {
51-
logError: true,
50+
logError: true
5251
});
5352
}
5453

5554
if (
56-
process.env.NODE_ENV !== 'test'
57-
&& !phoneCert.verifyToken(ptoken, phone)
55+
process.env.NODE_ENV !== 'test' &&
56+
!phoneCert.verifyToken(ptoken, phone)
5857
) {
5958
return throwError('올바른 휴대폰 인증 정보가 아닙니다.', 500);
6059
}
@@ -69,7 +68,7 @@ router.post('/', async (req, res, next) => {
6968
phone,
7069
address,
7170
interest,
72-
something: somethingStr,
71+
something: somethingStr
7372
});
7473
try {
7574
await user.save();
@@ -78,7 +77,7 @@ router.post('/', async (req, res, next) => {
7877
return throwError('DB 저장을 실패했습니다.', 500);
7978
}
8079
res.status(201).json({
81-
success: true,
80+
success: true
8281
});
8382
} catch (e) {
8483
next(e);
@@ -112,23 +111,15 @@ router.post('/overlap', async (req, res, next) => {
112111
}
113112
});
114113

115-
router.get('/:id', async (req, res, next) => {
114+
router.get('/:id', auth.authroized, async (req, res, next) => {
116115
try {
117-
let token;
118116
let query;
119117
try {
120-
token = req.headers['x-access-token'];
121118
query = { uid: req.params.id };
122119
} catch (e) {
123120
return throwError('필수 항목이 입력되지 않았습니다.');
124121
}
125122

126-
try {
127-
jwt.verify(token, query.uid);
128-
} catch (e) {
129-
return throwError('유효한 토큰이 아닙니다.', 403);
130-
}
131-
132123
const result = await User.findOne(query);
133124
try {
134125
const sendResult = {
@@ -137,7 +128,7 @@ router.get('/:id', async (req, res, next) => {
137128
email: result.email,
138129
phone: result.phone,
139130
address: result.address,
140-
interest: result.interest,
131+
interest: result.interest
141132
};
142133
res.json(sendResult);
143134
} catch (e) {

‎settings.example.json

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2-
"PHONE_KEY": "phonetokenkey",
3-
"PHONE_CERT_KEY": "certtokenkey"
4-
}
2+
"PHONE_KEY": "phonetokenkey",
3+
"PHONE_CERT_KEY": "certtokenkey",
4+
"TOKEN_KEY": "JWT_Token"
5+
}

‎yarn.lock

+5
Original file line numberDiff line numberDiff line change
@@ -2759,6 +2759,11 @@ prepend-http@^1.0.1:
27592759
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
27602760
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
27612761

2762+
prettier@1.18.2:
2763+
version "1.18.2"
2764+
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
2765+
integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==
2766+
27622767
process-nextick-args@~2.0.0:
27632768
version "2.0.1"
27642769
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"

0 commit comments

Comments
 (0)
Please sign in to comment.