后从登录用户登录变化联系在Node.js的

问题描述:

我使用用户认证passport.js注销,用户成功登录。 现在我试图改变导航链接,即登录注销后,用户成功登录英寸后从登录用户登录变化联系在Node.js的

的,我用下面的中间件在app.js文件

var express=require('express'); 
var path=require('path'); 
var bodyParser=require('body-parser'); 
var cookieParser=require('cookie-parser'); 
var passport=require('passport'); 
var LocalStrategy=require('passport-local').Strategy; 
var expressSession=require('express-session'); 
var app=express(); 
require('./db'); 
    var userModel=require('./models/usermodel'); 
    var adminModel=require('./models/adminmodel'); 

app.use(function (req, res, next) { 
    res.locals.login = req.isAuthenticated(); 
    next(); }); 


//Configuring Routes 
var routes = require('./routes/index'); 
var register = require('./routes/register'); 
var login = require('./routes/login'); 
var admin = require('./routes/admin'); 
var addblog = require('./routes/addblog'); 
var admindashboard = require('./routes/admindashboard'); 
var adminviewblog = require('./routes/admin-view-blog'); 
var viewblog = require('./routes/view-blog'); 

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

// app uses configuration 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 

app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'routes/uploads'))); 
app.use(expressSession({ secret: 'keyboard catoard cat' })); 
app.use(passport.initialize()); 
app.use(passport.session()); 


app.use('/', routes); 
app.use('/register', register); 
app.use('/login', login); 
app.use('/admin', admin); 
app.use('/addblog', addblog); 
app.use('/admindashboard', admindashboard); 
app.use('/admin-view-blog', adminviewblog); 
app.use('/view-blog', viewblog); 

//passport configuration 

    /*=======passport configuration========*/ 
passport.use("userss", new LocalStrategy(userModel.authenticate())); 
passport.use("adminn", new LocalStrategy(adminModel.authenticate())); 
passport.serializeUser(function(user, done){ 
    done(null, user.id); 
    }); 
passport.deserializeUser(function(id, done){ 
    userModel.findById(id, function(err, user){ 
     done(err, user); 
     }); 

    }); 
    passport.deserializeUser(function(id, done){ 
    adminModel.findById(id, function(err, user){ 
     done(err, user); 
     }); 

    }); 


//create server 
app.listen(3000, function(){ 
    console.log('Server is running localhost:3000'); 
    }); 

和EJS模板

<% if login %> 
     <li><a href="/logout">Logout</a></li> 
     <% else %> 
     <li><a href="/login">Login</a></li> 
     <li><a href="/register">Register</a></li> 
     <% endif %> 

但它不是加工。 显示以下错误的页面。

SyntaxError: Unexpected identifier in F:\saurabh_sharma\nodejs\blogsystem\views\index.ejs while compiling ejs 
    at Function (native) 
    at Object.Template.compile (F:\saurabh_sharma\nodejs\blogsystem\node_modules\ejs\lib\ejs.js:464:12) 

我GOOGLE了这个问题,但没有找到解决方案。

如果有人对此有想法,请让我知道。

谢谢。

+0

我不认为,除去多余的deserializeUser(后你应该有deserializeUser()' –

+0

确定...的'两个定义),还是其不工作 –

+0

什么是你的护照代码策略? –

不正确的!

<% if(true){ %> 
<h1>foo</h1> 
<% } %> 
<% else{ %> 
<h1>bar</h1> 
<% } %> 

正确

<% if(true){ %> 
<h1>foo</h1> 
<% } else{ %> 
<h1>bar</h1> 
<% } %> 

请正确构造你的条件语句。

参考:Can I use conditional statements with EJS templates (in JMVC)?

+0

错误被删除,但没有改变链接,在中间件有任何问题? –

+0

请尝试打印模板中的TOF'login'值,以验证是否login'的'值传递给模板或不 –

+0

当我打印在我的模板它显示布尔“假”后更换req.locals与app.locals –

<% if (login) { %> 
<li><a href="/logout">Logout</a></li> 
<% } else { %> 
<li><a href="/login">Login</a></li> 
<li><a href="/register">Register</a></li> 
<% } %> 
+0

我做到了,错误被删除,但它不改变链接。 –

+0

您应该检查“登录”中的内容 – Martial

+0

登录名称显示为“false”布尔型 –