将 CompoundJs 与 Passport 一起使用

Posted

技术标签:

【中文标题】将 CompoundJs 与 Passport 一起使用【英文标题】:Using CompoundJs with Passport 【发布时间】:2013-04-23 04:35:35 【问题描述】:

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

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'));
 ;

当我尝试通过传递有效的用户名和密码从 firebug 调用它时,我收到以下错误:

Undefined action undefined#undefined

谁能告诉我如何将 Passport 与 Compound Js 一起使用。

我也遇到过复合护照,但不知道我是否可以将其用于本地策略。提前致谢。

【问题讨论】:

你找到解决办法了吗? 您是否创建了您的护照本地目录?¿¿ 复合护照实施了本地策略。在 local.js 中查看您的复合护照/策略文件夹,它非常简单,除了一个愚蠢的 len 变量用于检查应该将多少参数传递给您的 verifyPassword 函数。将 verifyPassword 函数放入您的用户模型中。 【参考方案1】:

这是我如何设法使我的本地化。希望您也可以通过这种方式解决您的实现问题。

它将创建一个您可以一起使用的全新策略

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'));

local/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;

local/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);
  );


;

【讨论】:

以上是关于将 CompoundJs 与 Passport 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将 Laravel Passport 与移动应用程序一起使用

如何将 facebook-passport 与 express api 集成到 react 应用程序中?

将 fetch 与 Passport 一起使用会得到“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”

将护照 openID-stategy 与 JWT 相结合

对passport.use(strategy) done 功能及其与passport.authenticate 的关系感到困惑

护照身份验证不起作用。从未调用过的 Passport.serializeUser 和 passport.deserializeUser 会被调用