Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在node.js中使用Passport访问序列化用户大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经能够使用Passport进行身份验证,但我不知道如何访问序列化用户.我已经在几个地方读过访问它的方法是使用req.user但是当我尝试使用GET到/ Hello时,它表示用户未定义…

这是我的app.js

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var authentication = require('./routes/authentication');
var content = require('./routes/content');
var posts = require('./routes/post.js');
var upload = require('./routes/upload.js');
var media = require('./routes/media.js');
var http = require('http');
var path = require('path');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var mongoose = require('mongoose');
var mongoConnectionString = 'mongodb://localhost/judgmental';
var User = require('./models/user.js');

mongoose.connect(mongoConnectionString,function(error) {
    if (error) {
        throw error;
    }
    console.log('successfully connected to MongoDB');
});

var app = express();

// all environments
app.set('port',process.env.PORT || 3001);
app.set('views',__dirname + '/views');
app.set('view ENGIne','jade');
app.set('upload_dir',__dirname + '/uploads/posts/');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser({uploadDir:'./uploads/temp'}));
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname,'public')));
app.use(express.cookieParser('keyboard cat'));
app.use(express.cookieSession({secret:'keyboard cat',maxAge: 1000}));
app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);

// development only
if ('development' == app.get('env')) {
    app.use(express.errorHandler());
}

passport.use(new LocalStrategy(
    function(username,password,donE) {
        var query = username.indexOf("@") !== -1 ? {email: usernamE} : {username: usernamE};
        User.findOne(query,function (err,user) {
            if (err) { return done(err); }
            if (!user) { return done(null,false,{ message: 'Incorrect username.' }); }
            user.authenticate(password,function(error,user){
                if (error) { return done(error); }
                if (!user) { return done(null,{ message: 'Incorrect password.' }); }
                return done(null,user);
            });
        });
    }
));

// routes
// Users
app.get('/',routes.indeX);
app.get('/users',user.list);

app.get('/content',content.show);

// Posts
app.get('/post',posts.singlE);
app.get('/post/test/:id',posts.test);
app.get('/posts',posts.list);
app.post('/post/submitPost',posts.submitPost);
app.get('/post/upload',postS.UploadDefault)

// Upload
app.post('/upload/upload-file',upload.upload);

// Image handler
app.get('/media/:id',media.getImagE);

// Authentication
app.post('/signUp',authentication.signUp);
app.post('/signIn',authentication.signIn);
app.get('/Hello',function(req,res) {
    res.render('index.jade',{ id: req.user.id });
});

passport.serializeUser(function(user,donE) {
    console.log("serializeUser");
    done(null,user.id);
});

passport.deserializeUser(function(id,donE) {
    console.log("deserializeUser");
    User.findById(id,function(err,user) {
        done(err,user);
    });
});

http.createServer(app).listen(app.get('port'),function(){
  console.log('Express server listening on port ' + app.get('port'));
});

我知道用户是序列化的,因为我在进行身份验证时会记录“serializeUser”.有人知道如何在我的GET / Hello中获取序列化用户吗?

解决方法

如果存储中间件的会话无序应用,则可能存在问题.查看passportjs express3示例 here

大佬总结

以上是大佬教程为你收集整理的如何在node.js中使用Passport访问序列化用户全部内容,希望文章能够帮你解决如何在node.js中使用Passport访问序列化用户所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。