Last active
December 23, 2016 23:07
-
-
Save totuworld/72ffa52a423d192023514081880b593a to your computer and use it in GitHub Desktop.
이세계에 진입한 서버 개발 3강 자료
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
const debug = require('debug')('Wendy:utils:auth'); | |
const jwt = require('jsonwebtoken'); | |
///!!!반드시 외부에 노출되는 코드에는 secret을 직접 적지 않아야한다!!! | |
const SECRET = process.env.AuthSECRET || "secret"; | |
const EXPIRES = 3600; // 1 hour | |
// JWT 토큰 생성 함수 | |
function signToken(body) { | |
return jwt.sign(body, SECRET, { expiresIn: EXPIRES }); | |
} | |
exports.signToken = signToken; | |
exports.decodeToken = (token) =>{ | |
let decode = jwt.decode(token); | |
return decode; | |
} | |
/** | |
* JWT 토큰을 검증할 때 사용된다. | |
*/ | |
exports.isAuthenticated = (req, res, next) =>{ | |
debug('isAuthenticated'); | |
jwt.verify(req.headers.authorization, SECRET, (err, decoded)=>{ | |
if(err) { | |
// IF A USER ISN'T LOGGED IN, THEN REDIRECT THEM SOMEWHERE | |
res.status(401).send('The request has not been applied because it lacks valid authentication credentials for the target resource.') | |
} | |
else { | |
// Attach user to request | |
// request에 user정보를 포함하여 전송한다. | |
req.user = { | |
GameUserID:decoded.GameUserID, | |
GameDeviceUID:decoded.GameDeviceUID | |
}; | |
return next(); | |
} | |
}); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
/** | |
* object에 key가 포함되어있는지 체크한다 | |
* @param obj {object} | |
* @param keyArr {Array} | |
* @returns {boolean} | |
*/ | |
exports.ObjectExistThatKeys = (obj, keyArr)=>{ | |
for(let key of keyArr) { | |
if(obj[key]===null || obj[key]===undefined) { | |
return false; | |
} | |
} | |
return true; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
class CustomError extends Error { | |
constructor(message, code) { | |
super(message); | |
this.name = this.constructor.name; | |
this.code = code; | |
this.message = message; | |
if (typeof Error.captureStackTrace === 'function') { | |
Error.captureStackTrace(this, this.constructor); | |
} else { | |
this.stack = (new Error(message)).stack; | |
} | |
} | |
} | |
/** 99101 */ | |
class DontHaveRequiredParams extends CustomError { | |
constructor() { | |
let message = 'req.body에 필요한 값이 빠졌다.'; | |
let code = 99101; | |
super(message, code); | |
} | |
} | |
/** 80101 */ | |
class UnregisteredDevice extends CustomError { | |
constructor() { | |
let message = '등록하지 않은 기기'; | |
let code = 80101; | |
super(message, code); | |
} | |
} | |
/** 80103 */ | |
class UsedOnOtherDevice extends CustomError { | |
constructor() { | |
let message = '다른기기에서 사용중인 아이디'; | |
let code = 80103; | |
super(message, code); | |
} | |
} | |
/** 80202 */ | |
class CreateID extends CustomError { | |
constructor() { | |
let message = '등록된 기기이나 아이디가 생성되지않았다.'; | |
let code = 80202; | |
super(message, code); | |
} | |
} | |
/** 80203 */ | |
class UsedNickName extends CustomError { | |
constructor() { | |
let message = '이미 사용중인 NickName'; | |
let code = 80203; | |
super(message, code); | |
} | |
} | |
/** 80204 */ | |
class NickNameToLongOrShot extends CustomError { | |
constructor() { | |
let message = '3글자보다 짧거나 12글자 이상인 NickName'; | |
let code = 80204; | |
super(message, code); | |
} | |
} | |
let errorMap = { | |
"DontHaveRequiredParams":DontHaveRequiredParams, | |
"UnregisteredDevice":UnregisteredDevice, | |
"UsedOnOtherDevice":UsedOnOtherDevice, | |
"CreateID":CreateID, | |
"UsedNickName":UsedNickName, | |
"NickNameToLongOrShot":NickNameToLongOrShot | |
} | |
module.exports = function(errorName) { | |
let error = new errorMap[errorName]; | |
return error; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
module.exports = function(sequelize, DataTypes) { | |
let GameDevice= sequelize.define('GameDevice', { | |
GameDeviceUID : { type : DataTypes.INTEGER, primaryKey: true, autoIncrement: true}, | |
UUID:{type:DataTypes.STRING(60)}, | |
DeviceType:{type:DataTypes.INTEGER, defaultValue:0}, | |
MainFlag : { type : DataTypes.BOOLEAN, defaultValue:true } | |
}, { | |
timestamps: false, | |
tableName: 'GameDevice', | |
classMethods: { | |
associate: function (models) { | |
GameDevice.belongsTo(models.GameUser, { | |
onDelete: "CASCADE", | |
foreignKey: { | |
name:'GameUserID', | |
allowNull: true | |
} | |
}); | |
} | |
} | |
}); | |
return GameDevice; | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
const Sequelize = require('sequelize'); | |
module.exports = function(sequelize, DataTypes) { | |
let GameUser = sequelize.define('GameUser', { | |
GameUserID : { type : DataTypes.INTEGER, primaryKey: true, autoIncrement: true}, | |
NickName : { type : DataTypes.STRING(32) }, | |
Locale : { type : DataTypes.STRING(6)}, | |
OffsetTime : { type :DataTypes.INTEGER, defaultValue: 0}, | |
OffsetTimeUpdateAt : { type : DataTypes.DATE, defaultValue: Sequelize.NOW}, | |
createAt : { type : DataTypes.DATE, defaultValue: Sequelize.NOW}, | |
loginAt : { type : DataTypes.DATE, defaultValue: Sequelize.NOW} | |
}, { | |
timestamps: false, | |
tableName: 'GameUser' | |
}); | |
return GameUser; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment