Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый Сегодня, 01:34
Кандидат Javascript-наук
Отправить личное сообщение для riaron86 Посмотреть профиль Найти все сообщения от riaron86
 
Регистрация: 27.11.2021
Сообщений: 128

при проверке обработчика ошибок через postman jwt выводит неизменно один мейл
учусь авторизации jwt при проверке обработчика ошибок столкнулся с проблемой что при вводе ошибочного email, postman показывает в токене показывает правильный хотя в коyсоли введенный email показывает тот который ввел то есть тот который вызывает ошибку.

index.js
require('dotenv').config();
const express = require('express');
const sequelize = require('./db')
const models = require('./models/models')
const cors=require('cors');
const cookieParser=require('cookie-parser');
const router= require('./router/index');
const errorMiddleware=require('./middleware/error-middleware');

const PORT=process.env.PORT || 5000;
const  app=express();
app.use(express.json());
app.use(cookieParser());
app.use(cors());
app.use('/api',router);
app.use(errorMiddleware);
const start=async()=>{
    try{
        await sequelize.authenticate()
        await sequelize.sync()
        app.listen (PORT,()=>console.log(`server started on Port=${PORT}`))
    }catch (e){
        console.log(e);
    }
}

start();

controller
async login(req,res,next){
        try {
            const {email, password}=req.body;
            console.log("iiiiiiiiiiiiiiiiiiiiiiii"+email+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
            const userData=await userService.login(email,password);
            res.cookie('refreshToken',userData.refreshToken,{maxAge:30*24*60*60*1000,httpOnly:true})
            return res.json(userData);
        }catch (e) {
            next(e);
        }
    }


userService.login
async login(email,password){
        const user=await UserSchema.findOne({email});
        if (!user){
            throw ApiError.BadRequest('Пользователь с Таким Имейл не найден');
        }
        const isPassEquals=await bcrypt.compare(password,user.password);
        if(!isPassEquals){
            throw ApiError.BadRequest('Неверный пароль');
        }
        const  userDto=new UserDto(user);
        const tokens=tokenService.generateTokens({...userDto});
        await tokenService.saveToken(userDto.id,tokens.refreshToken);
        return{...tokens,user:userDto}
    }

}

dto
module.exports=class UserDto{
    email;
    id;
    isActivated;

    constructor(model) {
        this.email=model.email;
        this.id=model.id;
        this.isActivated=model.isActivated;
    }
}

api-error
module.exports=class ApiError extends Error{
    status;
    errors;

    constructor(status,message,errors=[]) {
        super(message);
        this.status=status;
        this.errors=errors;
    }

    static UnauthorizedError(){
        return new ApiError(401,'пользователь не авторизован')
    }

    static BadRequest(message,errors=[]){
        return new ApiError(400,message,errors);
    }
}

error-middlware
const ApoError=require('../exeptions/api-error');

module.exports=function (err,req,res,next){
    console.log(err);
    if(err instanceof ApoError){
        return res.status(err.status).json({message:err.message,errors:err.errors});
    }
    return res.status(500).json({message:'nepredvidennaja oshibka'});
}
Ответить с цитированием
  #2 (permalink)  
Старый Сегодня, 01:36
Кандидат Javascript-наук
Отправить личное сообщение для riaron86 Посмотреть профиль Найти все сообщения от riaron86
 
Регистрация: 27.11.2021
Сообщений: 128

вот что выводит в консоли
(sequelize) Warning: Model attributes (email) passed into finder method options of model userschema, but the options.where object is empty. Did you forget to use options.where?
Executing (default): SELECT `id`, `email`, `password`, `activationLink`, `isActivated`, `role`, `createdAt`, `updatedAt` FROM `userschemas` AS `userschema` LIMIT 1;
(sequelize) Warning: Model attributes (userschemaId) passed into finder method options of model tokenschema, but the options.where object is empty. Did you forget to use options.where?
Executing (default): SELECT `id`, `refreshToken`, `createdAt`, `updatedAt`, `userschemaId` FROM `tokenschemas` AS `tokenschema` LIMIT 1;
Executing (default): UPDATE `tokenschemas` SET `refreshToken`=?,`updatedAt`=? WHERE `id` = ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск