passportjs和backbone:验证用户

时间:2013-07-16 03:39:39

标签: backbone.js express passport.js

目前我一直在使用名为Postman的Chrome应用程序来测试nodejs / express / passportjs中的服务。

目前我无法掌握如何获取用户信息并使用骨干对其进行身份验证。

我会尝试像这样验证用户:

$.post("http://localhost:3000/login", { username: "joe", password: "pass" })
.done(function(data) {
  console.log(data)
  //try to pull a service that's protected by passport
})
.fail(function(data) {
  console.log(data)
})

当它成功时,它根本不起作用。它给出了我为有人未登录时设置的500错误。

我应该采用什么方向来管理主干中的passportjs身份验证?

1 个答案:

答案 0 :(得分:0)

500错误意味着服务器中某些部分代码无法正常工作。 您可以使用护照从快递发送登录用户。您可以按照以下示例进行操作。

var app = express();
var login = require('./routes/login');
app.post('/login', 
    passport.authenticate('local', { successRedirect: '/',  
                                   failureRedirect: '/login',
                                   failureFlash: true }), 
    login.login);

您的login.js文件可能如下所示

exports.login = function (req, res) {
    res.json(req.user);
}

护照的身份验证过程会在登录用户的请求(req)中填充用户变量。

请注意,您必须使用cookie解析器和快递会话才能使护照会话正常工作。如,

app.use(express.cookieParser());
app.use(express.session({ secret: 'keyboard cat' }));

您的本地身份验证可能如下所示(假设您有一个按用户名查找用户的函数(findByUsername))。

passport.use(new LocalStrategy({
    usernameField: 'username',
    passwordField: 'password'
  },
  function(username, password, done) {
    // asynchronous verification, for effect...
    process.nextTick(function () {

      // Find the user by username.  If there is no user with the given
      // username, or the password is not correct, set the user to `false` to
      // indicate failure and set a flash message.  Otherwise, return the
      // authenticated `user`.
      findByUsername(username, function(err, user) {
        if (err) { return done(err); }
        if (!user) { return done(null, false, { message: 'Unknown user ' + username }); }
        if (user.password != password) { return done(null, false, { message: 'Invalid password' }); }
        return done(null, user);
      })
    });
  }
));