首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有Passport的CompoundJs

使用带有Passport的CompoundJs
EN

Stack Overflow用户
提问于 2013-04-29 13:28:25
回答 1查看 642关注 0票数 4

我试着用Passport和复合J。我已经在初始化文件中配置了护照。如下所示

代码语言:javascript
复制
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;

在我的路线档案里:

代码语言:javascript
复制
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调用它时,我得到以下错误:

代码语言:javascript
复制
Undefined action undefined#undefined

有人能告诉我如何使用复合Js的Passport吗?

同时,我也经历了复合护照,但我不知道我是否可以把它用于当地的战略。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-06-10 13:25:41

这里是我如何使我的本地人。希望您也能用这种方式解决您的实现问题。

它将创建一个完全新的策略,您将能够一起使用。

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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);
  });


};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16279868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档