从静态json数据使用passport-local验证用户

时间:2016-05-21 11:49:25

标签: json node.js passport-local

我需要使用node.js中的passport-local从json文件验证用户身份。 我尝试使用MongoDb作为用户数据存储,它运行良好。 但现在我需要尝试使用Json文件作为用户详细信息存储,passportlocal需要从文件中获取数据以验证用户。

请帮忙。

1 个答案:

答案 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"}
}

主参数作为主键,并且必须是唯一的,以便根据该用户名获取用户信息,我假设其电子邮件地址。

希望有所帮助