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()
});