使用AngularJS进行身份验证 - NodeJS

时间:2014-11-11 15:25:52

标签: angularjs node.js yeoman

我无法弄清楚如何在我的AngularJS应用程序中进行简单的身份验证。 使用我的安装程序进行正常服务器端身份验证的最佳和最简单的方法是什么: Yeoman角度生成器,运行grunt服务器:9000。 有没有人有一个很好的教程?或任何提示?

另一个问题是,使用此设置存储数据的最简单方法是什么?使用MongoDB?

谢谢:)

4 个答案:

答案 0 :(得分:1)

AngularJS是一个前端JavaScript框架,您可以使用您选择的任何内容,在后端为您的应用程序提供热爱和了解。这个问题就像你在问“我正在使用HTML5,我应该在后端使用什么?” Angluar可以与许多服务器端语言一起使用,即。 Ruby,Node,PHP。

  • David Bryant Copeland有一个很棒的tutorial谈论 Ruby on Rails + Angular
  • 如果你想使用 PHP ,你可以使用任何安慰你的框架,有很多 可用。 CodeIgniter是流行的PHP框架之一。
  • 如果您想为应用程序使用节点Passport.js可以 感兴趣的东西。 MEAN Stack是新的东西,MEAN代表MongoDB + Express.js + Angular.js + Node.js.有一个准备好的Yoeman发生器可用于MEAN堆栈。

再次根据要求,您应该在SQL或NoSQL数据库之间进行选择。同样取决于服务器端语言的选择。

  • 如果您需要一个存储分层数据的可扩展数据库,NoSQL应该是您的选择。 MongoDB是一个流行的NoSQL数据库; CouchDB,RethinkDB是其他替代方案。
  • SQL数据库用于应用程序需要高事务的地方。虽然我们可以将NoSQL数据库用于基于事务的应用程序,但它与SQL数据库的比较并不稳定。 MySQL是最常用的SQL数据库。

答案 1 :(得分:0)

Angularjs实际上没有参与身份验证过程。 身份验证的基本流程非常简单: 您从'Angularjs app'(您的客户端应用程序)向您的服务器发送一个帖子请求,并将一对用户名/密码作为参数传递。 然后,在您的nodejs应用程序(服务器端)上查询数据库,查找提供的用户名,并尝试将发布请求中发送的密码与数据库中存储的与该用户相关的密码进行匹配。如果它们匹配,则在用户的客户端上设置一个cookie,该cookie与存储在数据库中的会话相关。 为了使这更简单,有一些库可以帮助您。 您可以将passport.js(http://passportjs.org/)与express(http://expressjs.com/)一起使用。 Passport将帮助您以安全的方式轻松设置身份验证过程,Express将为您提供cookie解析器,会话支持和您需要使用的其他工具等工具。 Express还将帮助您设置一个端点,您将在其中发布登录请求。 最后,为了存储数据,您可以使用您想要的任何数据库。 Nodejs具有相关数量的第三方库,可帮助与数据库进行交互。如果你想使用mongodb,这个库(https://github.com/mongodb/node-mongodb-native)将让你的生活变得轻松。

答案 2 :(得分:0)

你最好的选择是使用 angular-fullstack 生成器,因为它带有基本身份验证 - 本地和oAuth - 内置。从那里,你可以只使用身份验证是为您设置的,或者您可以将其用作参考,以帮助您弄清楚它的工作原理。

答案 3 :(得分:0)

我使用的最简单的设置是:

  • NodeJS / Express / Passport / Socket.io / MongoDB(实际上可以是其他任何东西)
  • AngularJS

Express正在使用Passport处理所有安全性(添加了一个自动表达req的护照方法,使您能够检查用户是否经过身份验证)。它被称为isAuthenticated,你可以像下面这样使用它:

function loggedOnly(req, res, next) {
    if (req.isAuthenticated()) {
        next();
    } else {
        res.redirect('/');
    }
} 

路线/& / login是公共的,但是当用户登录时,他们会重定向到/ app。 Route / app是Angular app,它是私有的,当用户未经过身份验证时会重定向到/ login。

app.get('/', anonOnly);

Socket.io有passport.socketio个中间件,用于自动拒绝可能发生的未经授权的连接。

然后,我通过执行以下操作来访问用户对象:

io.on('connection', function(socket) {
      var user = socket.conn.request.user;
});

总而言之,登录逻辑由静态Express视图处理。此外,Express打印几个constant到Angular应用程序包含例如用户数据。对于显示例如非常有用userName在某个时刻。

虽然设置它可能需要一些时间,但如果您想了解应用程序的整个逻辑,那绝对值得一试。我已经提供了要使用的开源软件包的名称,所有细节都可以在他们的自述文件中找到。指南(如果你谷歌一段时间,很多已经存在)。