如何使用Node.js和MEAN堆栈进行身份验证? - 代码日志

如何使用Node.js和MEAN堆栈进行身份验证?

我目前正在与一小群开发人员进行基于文本的游戏。游戏需要登录,我们正在使用MEAN(MongoDB,Express,Angular,Node)Stack作为应用程序的代码库,不过我被认证了,作为一个rails开发人员,我习惯于能够放弃一个宝石,并使用帮助者可用。

有谁有任何有经验的MEAN和认证?

linnovate的MEAN堆栈使用Passport.js进行认证。护照使用不同的认证策略。其中一个策略是用户名和密码对,他们称之为LocalStrategy。

以下是Passportjs-Local Github Examples Page的样品之一

步骤1:需要护照

首先你需要模块做npm安装护照后

var passport = require('passport');

步骤2:配置“验证”功能

在Passport内使用LocalStrategy。护照策略需要验证功能,该功能可以接受凭证(在这种情况下是用户名和密码),并使用用户对象调用回调。在现实世界中,这将查询数据库;然而,在这个例子中,我们使用一个烘焙的用户组。

passport.use(new LocalStrategy(
  function(username, password, done) {

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

步骤3:在应用程序上初始化护照

您需要告诉Express,您将使用护照,并将为您管理会话。这是通过在应用程序配置期间使用app.use()完成的。

app.use(passport.initialize());
app.use(passport.session());

步骤4:在登录URI上配置中间件

接下来,我们需要创建一种方法,当用户尝试通过POST到特定的URI来尝试登录到应用程序时,该方法将被接受。看起来就像这样。

// POST /login
//   Use passport.authenticate() as route middleware to authenticate the
//   request.  If authentication fails, the user will be redirected back to the
//   login page.  Otherwise, the primary route function function will be called,
//   which, in this example, will redirect the user to the home page.
//
//   curl -v -d "username=bob&password=secret" http://127.0.0.1:3000/login
app.post('/login', 
  passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }),
  function(req, res) {
    res.redirect('/');
  });

步骤5:设置会话
您可能必须为存储在会话中的User对象创建自己的序列化。这是完成以下

// Passport session setup.
//   To support persistent login sessions, Passport needs to be able to
//   serialize users into and deserialize users out of the session.  Typically,
//   this will be as simple as storing the user ID when serializing, and finding
//   the user by ID when deserializing.
passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  findById(id, function (err, user) {
    done(err, user);
  });
});
http://stackoverflow.com/questions/18708428/how-to-do-authentication-with-node-js-and-mean-stack

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何使用Node.js和MEAN堆栈进行身份验证?