2013-04-29 38 views
4

我正在尝试使用Passport和Compound Js。我已经在初始化文件中配置了护照。如下与Passport一起使用CompoundJs

var passport = require('passport') 
, LocalStrategy = require('passport-local').Strategy; 

passport.use(new LocalStrategy({usernameField: 'email'}, 
     function(email, password, done) { 
     User.findOne({ email: email }, function(err, user) { 
     if (err) { return done(err); } 
     if (!user) { 
     return done(null, false, { message: 'Incorrect username.' }); 
     } 
     if (!user.validPassword(password)) { 
     return done(null, false, { message: 'Incorrect password.' }); 
    } 
     return done(null, user); 
    }); 
} 
)); 
module.exports.passport = passport; 

而在我的路线文件我有:

var passobj = require('./initializers/initialize_passport') 

exports.routes = function (map) { 
     map.post("api/users", passobj.passport.authenticate('local', {successRedirect: 'user#index', failureRedirect: 'user#failureoccured'})); 
}; 

当我试图通过传递一个有效的用户名和密码,才能从萤火虫打电话,我得到了以下错误:

Undefined action undefined#undefined 

任何人都可以请告诉我如何使用护照复合Js。

而且我还穿着复合护照,但不知道我是否可以将它用于本地策略。提前致谢。

+0

你有没有找到解决方案? – Chausser 2013-12-09 02:48:53

+0

您是否创建了护照 - 本地目录? – 2015-06-10 13:18:18

+0

复合护照实施了本地策略。查看local.js中的compound-passport/strategies文件夹,除了一个愚蠢的len变量用来检查应该将多少个参数传递给你的verifyPassword函数外,它非常简单。将verifyPassword函数放入您的用户模型中。 – user254694 2015-08-14 08:01:49

回答

0

这是我如何设法让我的本地。希望你也可以这样解决你的实现。

这将创建一个完整的新的战略,你将能够使用起来

var express = require('express'); 
var passport = require('passport'); 
var config = require('../config/environment'); 
var User = require('../api/user/user.model'); 

// Passport Configuration 
require('./login/passport').setup(User, config); 

//HERE WE WILL ADD OUR LOCAL STRATEGY 
var router = express.Router(); 
router.use('/local', require('./local/index')); 

本地/ index.js

var passport = require('passport'); 
var auth = require('../auth.service.js'); 

var router = express.Router(); 

router.post('/', function(req, res, next) { 

    console.log.req; 

    passport.authenticate('local', function (err, user, info) { 
    var error = err || info; 
    if (error) return res.json(401, "THAT´S BAD"); 
    if (!user) return res.json(404, {message: 'Something went wrong, please try again.'}); 
    var token = auth.signToken(user._id, user.role); 
    res.json({token: token, user:user}); 
    })(req, res, next) 
}); 

module.exports = router; 

本地/ passport.js

var passport = require('passport'); 
var Local = require('passport-local').Strategy; 

exports.setup = function (User, config) { 
    passport.use("local", new Local({ 
     usernameField: 'apikey', 
     passwordField: 'apisecret' 
    }, 

    function(apikey, apisecret, done) { 
//THIS FUNCTION IS THE ONE YOU HAVE TO IMPLEMENT TO YOUR LOCAL WAY 
     User.findOne({ 
     apikey: apikey, 
     apisecret: apisecret 
     }, function(err, user) { 
     if (!user) { 
      return done("YOUR API KEY HAS NOT AUTHORIZATION", false, { message: 'This email is not registered.' }); 
     } 
     return done(null, user); 
     }); 
    } 
)); 

    passport.serializeUser(function(user, done) { 
    done("USER", user); 
    }); 

    passport.deserializeUser(function(user, done) { 
    done(null, user); 
    }); 


};