我需要使用node.js中的passport-local从json文件验证用户身份。 我尝试使用MongoDb作为用户数据存储,它运行良好。 但现在我需要尝试使用Json文件作为用户详细信息存储,passportlocal需要从文件中获取数据以验证用户。
请帮忙。
答案 0 :(得分:0)
让我们假设这是您的主要应用
var db = require('./db.js');
var passport = require('passport');
var bodyParser = require('body-parser');
var LocalStrategy = require('passport-local').Strategy;
var express = require('express')();
express.use(bodyParser.urlencoded({ extended: false }));
passport.use(new LocalStrategy(function(username, password, done)
{
db.getUser(username, function (err, user)
{
if (err)
return done(err,null);
else
return done(null, user);
});
}));
// Serilize authenticated user into the request so they can access callback functions
passport.serializeUser(function(user, done)
{
done(null, user);
});
// deserilize authonticated user so the callback function can read thier data
passport.deserializeUser(function(user, done)
{
done(null, user);
});
express.post('/auth',passport.authenticate('local', {session:false,failureRedirect:"/accessdenied"}),function(req,res)
{
res.send("authenticated");
});
express.get('/accessdenied',function(req,res)
{
res.send("access denied");
});
express.listen(4321);
这是您从json文件中获取用户的同一文件夹上的模块
var fs = require('fs');
exports.getUser = function(user,cb)
{
fs.readFile('users.json','utf8',function(err,data)
{
if(err)
cb(err,null);
else
{
try
{
var users = JSON.parse(data);
if(users[user] != undefined)
{
cb(null,users[user]);
}
else
{
cb(null);
}
}
catch(e)
{
cb(e,null)
}
}
})
}
这是您在同一文件夹上的users.json文件的结构
{
"user@example.com":{"firstName":"abdullah","lastName":"Shahin","email":"user@example.com","password":"234","age":"28"},
"user2@example.com":{"firstName":"Nick","lastName":"Persons","email":"user2@example.com","password":"234","age":"27"}
}
主参数作为主键,并且必须是唯一的,以便根据该用户名获取用户信息,我假设其电子邮件地址。
希望有所帮助