bcryptjs не входит в систему, но я могу зарегистрировать пользователя - PullRequest
0 голосов
/ 31 декабря 2018

Я новичок Nodejs, я создал простой API входа / регистрации.Я использую bcryptjs для своих паролей.Я тестирую свой API на почтальоне, я могу зарегистрировать нового пользователя.когда я вхожу с неправильным адресом электронной почты, я получаю правильное сообщение.Моя проблема, когда я пытаюсь войти в систему с правильным адресом электронной почты / паролем, я не получаю никакого ответа.вот мой код

const express = require("express")
const users = express.Router()
const cors = require('cors')
const jwt = require("jsonwebtoken")
const bcrypt =require('bcryptjs')
const User = require("../models/User")
users.use(cors())

process.env.SECRET_KEY ='secret'

users.post('/register',(req, res)=>{
    const today  = new Date()
    const userData={
        first_name: req.body.first_name,
        last_name: req.body.last_name,
        email: req.body.email,
        mobile_no: req.body.mobile_no,
        created: today,
        active: req.body.active,
        password: req.body.password
    }
    User.findOne({
        where:{
            email: req.body.email
        }
    })
    .then(user =>{
        if(!user){
            bcrypt.hash(req.body.password,10,(err, hash) =>{
                userData.password =hash
                User.create(userData)
                .then(user =>{
                    res.json({status: user.email + ' registered'})
                })
                .catch(err =>{
                    res.send('error:' + err)
                })
            })
        }else {
            res.json({error: " User already exists"})
        }
    })
    .catch(err => {
        res.send('error:'+ err)
    })
})

users.post('/login',(req, res)=>{
    User.findOne({
        where:{
            email:req.body.email
        }
    })
    .then(user =>{
        if(user){
            if(bcrypt.compareSync(req.body.password, user.password)){
                let token = jwt.sign(user.dataValues, process.env.SECRET_KEY,{
                    expiresIn: 10000
                })
                res.send(token)
            }
        }else{
            res.status(400).json({error: ' User does not Exist'})

        }
    })
    .catch(err =>{
        res.status(400).json({error: err})
    })
})
module.exports = users;

Пожалуйста, ПОМОГИТЕ!

1 Ответ

0 голосов
/ 31 декабря 2018

Похоже, что вы не используете bcryptjs должным образом.При входе в хэш пароля вы даете user.password, я думаю, что есть ошибка.

To hash a password:

var bcrypt = require('bcryptjs');
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync("B4c0/\/", salt);
// Store hash in your password DB.
To check a password:

// Load hash from your password DB.
bcrypt.compareSync("B4c0/\/", hash);  
bcrypt.compareSync("not_bacon", hash); 
...