токен не работает после входа в систему, когда я пытаюсь получить метод с токеном - PullRequest
0 голосов
/ 20 февраля 2020

Que: После генерации Authtoken, когда я пытаюсь использовать метод get в качестве профиля (о котором я упоминал в файле входа. js), он не предоставляет подробности пользователя, вместо этого показывает, что пользователь не вошел в систему. (Файл промежуточного ПО)

Blockquote

еще один вопрос: нужно ли хранить токен в базе данных или нет? если да, пожалуйста, объясните подробно

контроллер: вход. js код

var express=require('express');
var signupuser=require('../model/singup')
var router=express.Router();
var bcrypt=require('bcryptjs');
var validator=require('validator');
var jwt=require('jsonwebtoken');
var auth=require('../middleware/auth')
router.post('/',async(req,res)=>
{
const {email,password}=req.body
const user=await signupuser.findByCredentials(email,password)
if(!user){
    return res.status(401).send({error:"Login failed ! email or pasword wrong"})
}
const authtoken=await user.generateauthToken()
res.send({user,authtoken})
});

router.get('/profile',auth,(req,res)=>{  // using this method to get profile but it is not providing token 
    res.send(req.user)
})
module.exports=router;

Blockquote

Middleware: auth. js код

var express=require('express');
var signupuser=require('../model/singup')
var jwt=require('jsonwebtoken');
var router=express.Router();
var auth= async function(req,res,next){
const token =req.header("Authorization").replace('Bearer ','')
const decode=jwt.verify(token,"mynameisbhupesh");
try{
    const user= await signupuser.findOne({id:decode._id,'authtoken.token':token})
    if(!user){
        res.json("user not loged in" )
    }
    req.user=user
    req.token=token
    next();
 }catch(err){
res.status(401).send({error:'no auth token'})
 }}


module.exports=auth

Цитата

Модель: регистрация. js

var mongoose=require('mongoose');
require('../db');
var bcrypt=require('bcryptjs');
var validator=require('validator');
var jwt=require('jsonwebtoken');
mongoose.Promise=require('bluebird');
var schema= new mongoose.Schema({
    name:{type:String,required:true},
    email:{type:String,required:true,unique:true,validate:value=>{
        if(!validator.isEmail(value)){
            throw new Error({error:'invalid email address'}) 
        }
    }},
    password:{type:String,required:true,minlength:5}, 
    //  authtoken:[{token:{type:String,required:true}}],  
});


schema.pre('save',async function(next){
    const user=this
    if(user.isModified('password')){
        user.password=await bcrypt.hash(user.password,8)
    }
    next()
})

schema.methods.generateauthToken=async function(){
    const user=this
    const token=jwt.sign({_id:user._id},"mynameisbhupesh",{
        expiresIn:10000000000000000000000000
    })
    // user.authtoken=user.authtoken.concat({token})
   await user.save()
    return token
}
schema.statics.findByCredentials =async (email,password)=>{
    const user=await signupuser.findOne({email})
    if(!user){
        throw new Error ({error:'Invalid user'}) 
    }
    const ispassmatch=await bcrypt.compare(password,user.password) 
    if(!ispassmatch){
        throw new Error ({error:'Invalid user'})
    } 
    return user 
     }

const signupuser=mongoose.model('signupuser',schema);
module.exports=signupuser;

Цитата

* Контроллер 1029 *: регистрация. js
var express=require('express');
var signupuser=require('../model/singup')
var router=express.Router();
var bcrypt=require('bcryptjs');
var validator=require('validator');
var jwt=require('jsonwebtoken');
router.post('/',async (req,res)=>{
    try{
        const user=new signupuser(req.body)
        await user.save()
        const token=await user.generateauthToken()
        res.status(201).send({user,token})
    }
    catch(error){
        res.status(400).send(error)
    }
})
module.exports=router;

Blockquote

база данных: дБ. js

var cookie=require('cookie-parser');
var Mongostor=require('connect-mongo');
var mongose=require('mongoose');
var express=require('express');
var session=require('express-session');
var app=express()
require('dotenv')
mongose.set('useNewUrlParser', 'true');
mongose.set('useCreateIndex', 'true');
mongose.set('useFindAndModify', 'true');
mongose.connect("mongodb://127.0.0.1:27017/website");

var db=mongose.connection;
db.on('error',console.error.bind(console,'connection error'));
db.once('open',(req,res)=>{
    console.log("connected with db!!!");
})
app.use(cookie());
app.use(session({
    secret:'topsecret ',
    resave:false,
    cookies:{
        secrue:true
    },
}))
module.exports=mongose

Цитата

index. js file

require('./middleware/auth')
var app=require('./server')
var signup=require('./controller/signup');
var signin=require('./controller/signin')
var session=require('express-session')
var db=require('./db');
var bodyParser = require('body-parser');
var cookie=require('cookie-parser');
var Mongostor=require('connect-mongo');
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.set('viewengin','ejs')
app.set('useNewUrlParser', 'true')
app.set('useUnifiedTopology', 'true')
app.use('/user/signup',signup);
app.use('/user/signin',signin);


app.all('*',(req,res)=>{
    return res.json({status: 205,message: 'not found'});
})

var server=app.get('/',(req,res)=>{
req.end()
});

1 Ответ

0 голосов
/ 20 февраля 2020

Вам не нужно хранить токен в базе данных. Вам просто нужно проверить токен, и тогда вы получите данные, если токен действителен.

Вам необходимо обновить auth.js файл (особенно signupuser.findOne({ _id: decode._id})), id до _id и удалить токен из запроса

var express = require('express');
var signupuser = require('../model/singup');
var jwt = require('jsonwebtoken');
var router = express.Router();
var auth = async function (req, res, next) {
    const token = req.header("Authorization").replace('Bearer ', '');
    const decode = jwt.verify(token, "mynameisbhupesh");
    try {
        if(!decode) {
            return res.status(401).send({ error: 'no auth token' });
        }
        const user = await signupuser.findOne({ _id: decode._id});
        if (!user) {
            return res.json("user not loged in");
        }
        req.user = user;
        req.token = token;
        next();
    } catch (err) {
        res.status(401).send({ error: 'no auth token' });
    }
}


module.exports = auth
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...