Добрый день. Отделил логику авторизации в приложении от роутинга. Авторизацию для удобства хочу сделать классом. Посмотрите код ниже:
const {
Router
} = require('express')
const router = Router()
const Authorized = require('../moduls/authorized')
const auth = new Authorized()
router.post('/login', async (req, res) => {
const query = 'SELECT id FROM userslogin WHERE name = $1 AND password = $2'
const {
username,
password
} = req.body
try {
const data = await connectDb(query, [username.toLowerCase(), password.toString()])
if (data.length != 0) {
const token = auth.createSign({
id: data[0].id,
username: username
}, auth.secretKey)
res.status(200)
res.send({
id: data[0].id,
token: token
})
} else {
res.status(401)
res.send('No user or password')
}
} catch (error) {
console.log(error)
}
})
Это роутер. К нему подключаю класс авторизации:
class Authorized {
constructor() {
const jwt = require('jsonwebtoken')
const secretKey = 'dSjkLsSjerIfkL'
}
createSign(data, secretKey){
return this.jwt.sign(data,secretKey)
}
isAuthorized(req, res, next){
if (typeof req.headers.token !== "undefined") {
const token = req.headers.token.split(' ')[1]
this.jwt.verify(token, this.secretKey, {
algorithms: 'HS256'
}, (err, decoded) => {
if (err) {
res.status(500).json({
error: 'No authorized'
})
}
next()
})
} else {
console.log('No authorized')
}
}
}
module.exports = Authorized
Ошибка Cannot read property 'sign' of undefined
at Authorized.createSign js:7:25
Что то не так с методом createSign, помогите пожалуйста разобраться.