Сессия пользователя паспорта не обнаружена (угловая) на маршруте - PullRequest
0 голосов
/ 12 мая 2019

У меня есть заголовок с навигационной панелью, на котором есть кнопки Зарегистрироваться, Войти, Стать продавцом.Когда пользователь вошел в систему, он показывает выход из системы, просмотр кнопок профиля.Эта функциональность работает на всех маршрутах / страницах, кроме упомянутой ниже, которая выдает эту ошибку на стороне клиента.

user not defined.

Ниже представлен маршрут, файл маршрута, header.ejs., app.js (включает passport.js, сессии и все другие требования)

Маршрут

router.post("/buy/:id",function(req,res){
///
});

Весь код маршрута упоминается здесь: имя файла маршрута

customer.js

Маршрут:

var express = require('express');
var router = express.Router();
var account=require("../models/account");
var randomstring = require("randomstring");
var data=require('../models/data');
var acessToken=require("../models/acessTokens");
var user=require("../models/user");
"use strict";
const nodemailer = require("nodemailer");


  var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
      user: 'dataseedltd@gmail.com',
      pass: '*******'
    }
  });  


router.get('/',function(req,res){
  res.render('buyer/index.ejs');
});
router.get('/buy/:id',isloggedin,function(req,res){
    account.find({user:req.user},function(err,data){
        if(err)console.log(err);
        else{
                if(data.length==0)
                {   
                    console.log('in /buyer/buy');
                    req.flash('success','account is required');
                    res.redirect('/general/account/setting');   }
                else{
                      console.log('------------');
                      console.log(req.params.id);


                    console.log('in here /buyer/buy');
                        res.render('buyer/buy.ejs',{data:req.params.id});   
                }

            }


        });
});






router.post('/buy/:id',function(req,res){

  console.log('------++++++++++--------------h12');


      var token=randomstring.generate(7);
      var to=req.user.email;
      var subject='Email Confirmation from dataSeed for Purchase';
      var message='<h1>Thankyou for your purchase.</h1><p>Your verification Code is: <h2>'+token+'</h2></p>';
        var mailOptions=sendmail(to,subject,message);
      data.findById({"_id":req.params.id},function(err,data){

        console.log("DATA.USER --------------------------------------------------");
        console.log(data.user);

        if(err)console.log(err);
        else{
              acessToken.create({user:req.user,data:req.params.id,token:token},function(err,acess){
                  if(err)console.log(err);
                  else{
                      console.log("ACCESSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSss");
                        console.log(acess.user);
                        transporter.sendMail(mailOptions, function(error, info){
                          if (error) {
                              console.log(error);
                          }
                          else
                          {
                            console.log("------------------------------------------------------------------------------------TYPE OF USER ID: " + typeof(req.user._id));

                            console.log(req.user._id);
                            account.findOne({"user":req.user._id},function(err,d){
                              console.log(err);
                              console.log(d);
                              if(err)console.log(err)

                                    var accountnumber = d.accountnumber;
                                    console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ACCOUNT NUMBER :  " + accountnumber);
                                    var amount=d.currentamount-data.price;
                                    var transferedamount=d.transferedamount+data.price;
                                    console.log("Amount: "+amount); // NaN

                                account.findByIdAndUpdate({user:req.user},{currentamount:amount,transferedamount:transferedamount},function(err,update){
                                  if(err)console.log(err);
                                    console.log('Email sent: ' + info.response);



                                    //getUsername of seller

                                    // console.log(data.user)
                                    user.findById({"_id":data.user},function(err,seller){
                                        if(err){
                                        console.log(err);
                                        }else{

                                          var buyer = req.user.username;
                                          var seller = seller.username;
                                          var priceOfData = data.price;
                                          //ccNumber undefined
                                          var ccnumber = d.accountnumber;


                                        console.log("Buyer Name " +buyer);
                                        console.log("Seller Name " +seller);
                                        console.log("Price " +priceOfData);
                                        console.log("Purchased on Credit Card Number " +ccnumber);



                                            res.render('buyer/sold.ejs');

                                        }
                                      });
                                  });
                              });
                          }
                      });
                    }
              });
          }
        });
});

function sendmail(to,subject,message){

    var mailOptions = {
    from: 'dataseedltd@gmail.com',
    to: to,
    subject: subject,
    html: message 

    };
    return mailOptions;

}


function isloggedin(req, res, next){
    if(req.isAuthenticated()){
        return next();
    }
    res.redirect('/users/login');
}





module.exports = router;

header.ejs

<head>
    <link href="/stylesheets/bootstrap.css" rel="stylesheet">
    <link href="/stylesheets/style.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
    <script defer src="https://use.fontawesome.com/releases/v5.8.1/js/all.js" integrity="sha384-g5uSoOSBd7KkhAMlnQILrecXvzst9TdC09/VM+pjDTCM+1il8RHz5fKANTFFb+gQ" crossorigin="anonymous"></script>




  </head>
  <body>

  <nav style="" class="navbar navbar-default">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">

        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" style="color:gray;" href="/">DataSeed</a>

    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse pull-right" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">

      <ul class="nav navbar-nav navbar-right">

      <% if(user) { %>


        <li><a href="/users/logout">Logout <i class="fas fa-sign-out-alt"></i>
        <li><a href="/general/profile/<%=user._id%>">View Profile <i class="fas fa-sign-out-alt"></i></a></li>

        <li><a href="/checklist">Cart <i class="fas fa-sign-out-alt"></i></a></li>
        <li><a href="/getdata"> Download Data <i class="fas fa-sign-out-alt"></i></a></li>
        <li><a href="/message"> Open Chat <i class="fas fa-sign-out-alt"></i></a></li>

      <%}else{%>
        <li><a href="/users/login"><i class="fas fa-user-circle"></i>Login</a></li>
        <li><a href="/users/register/buyer"><i class="fas fa-user-plus"></i>Register</a></li>
        <li><a href="/users/register/seller"><i class="fas fa-store"></i>Become A Seller</a></li>
        <li><a href="/checklist">My Checklist <i class="fas fa-sign-out-alt"></i></a></li>

      <%}%>  

      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>


  <div class='container'>
  <%if (messages && messages.length>0) {%>

     <div class="alert alert-danger"><%=messages%></div>
   <%}%>
 </div>


    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="javascripts/bootstrap.js"></script>

app.js (файл сервера, узел app.js)

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var expressValidator = require('express-validator');
var multer = require('multer');
var upload = multer({dest: './uploads'});
var flash = require('connect-flash');
var bcrypt = require('bcryptjs');
var mongo = require('mongodb');
var mongoose = require('mongoose');
var db = mongoose.connection;
var client = require("socket.io").listen(4000).sockets;

var app=express();

const http = require('http').Server(app);
const io = require('socket.io')(http);

require('./libs/db-connection');

app.use('/public', express.static('public'));


const Chat = require('./models/Chat');



var routes = require('./routes/index');
var users = require('./routes/users');
var buyer=require('./routes/buyer');
var seller=require('./routes/seller');
var general=require('./routes/general');
var fileupload=require("./routes/fileupload");


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// Handle Sessions
app.use(session({
  secret:'secret',
  saveUninitialized: true,
  resave: true
}));

// Passport
app.use(passport.initialize());
app.use(passport.session());

// Validator

app.use(expressValidator({
  errorFormatter: function(param, msg, value) {
      var namespace = param.split('.')
      , root    = namespace.shift()
      , formParam = root;

    while(namespace.length) {
      formParam += '[' + namespace.shift() + ']';
    }
    return {
      param : formParam,
      msg   : msg,
      value : value
    };
  }
}));







app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(flash());

app.use(function (req, res, next) {
  // res.locals.messages = require('express-messages')(req, res);
  next();
});




app.get('*', function(req, res, next){
  res.locals.user = req.user || null;
  res.locals.messages = req.flash('success');

  next();
});




app.use('/', routes);
app.use('/users', users);
app.use('/buyer',buyer);
app.use('/seller',seller);
app.use('/general',general);
app.use('/upload',fileupload);

//--------------------------------------Chat------------------------------------
var users={};//nickname to be key...and value to be socket..
//now create a route which is what made easy  by express
app.get('/message',ensureAuthenticated,function(req,res){
//  res.render(__dirname+"/indexC.ejs")
res.render("indexC.ejs")
});
app.get('/message/:name',ensureAuthenticated,function(req, res) {
   res.render('indexC.ejs',{to:req.params.name}); 
});

//put up socket functionality on server side
io.sockets.on('connection',function(socket){//everytime a user connects has its own socket
    //console.log("new user");
    socket.on('new user',function(data,callback){
        console.log("New user");
        //socket.emit('select_room',data);

            console.log("here");
            callback(true);
            socket.nickname=data;//store nickname of each user becomes clear on disconnect
            users[socket.nickname]=socket;//key value pair as defined above
            //nicknames.push(socket.nickname);
            //io.sockets.emit('usernames',nicknames);//send usernames for display
            updateNicknames();

    });
    socket.on('sendmessage',function(data,callback){
        //console.log(data);
        var msg=data.trim();
        if(msg[0]=='@')//if thats whisper or private msg
        {
            msg=msg.substr(1);//start of name onwards
            var idx=msg.indexOf(' ');
            if(idx!==-1)
            {
                //check the username is valid
                var name=msg.substr(0,idx);
                msg=msg.substr(idx+1);
                if(name in users)
                {
                    users[name].emit('whisper',{msg:msg,nick:socket.nickname});
                    console.log('whispered');   
                }
                else
                {
                    callback('Error! User not connected to chat pool!');
                }   
            }
            else//no actual msg part
            {
                callback('Error! Please enter a message for your whisper');
            }
        }
        else{
            io.sockets.emit('newmessage',{msg:msg,nick:socket.nickname});//broadcast to everyone and i too can see the msg
            //socket.broadcast.emit('newmessage',data);//broadcast to evry1 except me
        }

    });
    function updateNicknames(){
        io.sockets.emit('usernames',Object.keys(users));//sending socket does not make sense
    }
    //whenever user disconnect he/she should be removed from the list
    socket.on('disconnect',function(data){
        if(!socket.nickname)//when the user has no nickname 
            return;
        delete users[socket.nickname];
        updateNicknames();
    });
});


//////////////////////////////



// listen
http.listen(process.env.PORT || 3000, () => {
  console.log('Running');
});

function ensureAuthenticated(req, res, next){
    if(req.isAuthenticated()){
        return next();
    }
    res.redirect('/users/login');
}




// app.listen(process.env.PORT,process.env.IP,function(req,res){
//   console.log("ss");
// });
module.exports = app;

1 Ответ

0 голосов
/ 12 мая 2019

В файле customer.js

Маршрут:

router.post('/buy/:id',function(req,res){
//route code
res.render('/');
});

Я не передал req.user в качестве параметра при рендеринге sold.ejs

...