Задать вопрос
@Banjamin
Пишу

Как правильно создать класс?

Добрый день. Отделил логику авторизации в приложении от роутинга. Авторизацию для удобства хочу сделать классом. Посмотрите код ниже:
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, помогите пожалуйста разобраться.
  • Вопрос задан
  • 183 просмотра
Подписаться 2 Средний Комментировать
Решения вопроса 1
notiv-nt
@notiv-nt
Как ваше ничего? Да, моё тоже
class Authorized {
  constructor() {
    this.jwt = require('jsonwebtoken')
    this.secretKey = 'dSjkLsSjerIfkL'
  }
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы