【问题标题】:Authentication with AngularJS - NodeJS使用 AngularJS 进行身份验证 - NodeJS
【发布时间】:2014-11-12 04:14:57
【问题描述】:

我不知道如何在我的 AngularJS 应用程序中进行简单的身份验证。 使用我的设置进行正常服务器端身份验证的最佳和最简单的方法是什么: Yeoman 角度生成器,在 :9000 上运行 grunt 服务器。 谁有好的教程?或任何提示?

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

谢谢你:)

【问题讨论】:

    标签: angularjs node.js yeoman


    【解决方案1】:

    AngularJS 是一个前端 JavaScript 框架,您可以在后端为您的应用程序使用您喜欢和了解的任何东西。这个问题就像你在问“我正在使用 HTML5,我应该在后端使用什么?” Angular 可以与许多服务器端语言一起使用,即。 Ruby、Node、PHP。

    • 有一个很棒的 tutorial 谈论 David Bryant Copeland 的 Ruby on Rails + Angular
    • 如果你想使用PHP,你可以使用任何让你舒服的框架,有很多 可用的。 CodeIgniter 是流行的 PHP 框架之一。
    • 如果您想为您的应用程序使用 NodePassport.js 可以 成为感兴趣的东西。 MEAN Stack 是即将出现的新事物,MEAN 代表 MongoDB + Express.js + Angular.js + Node.js。有一个现成的用于 MEAN 堆栈的 Yoeman 生成器。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我试图让 angularfullstack 工作至少 3 个小时,但它不起作用。 npm install 命令总是抛出 SSL 认证错误。
        • 你正在发出命令sudo npm install -g generator-angular-fullstack?
        • 不,我可以扔掉 yeoman angular-fullstack 生成器的整个安装过程,bower install 也在这个过程中工作,但是当它为节点模块启动 npm install 任务时,我得到了错误因为 SSL 认证
        • 你有没有试过在 yeoman 完成工作后运行npm install
        【解决方案4】:

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

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

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

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

        Route / & /login 是公开的,但是当用户登录时,他们会重定向到 /app。 路由 /app 是 Angular 应用程序,它是私有的,当用户未通过身份验证时重定向到 /login。

        app.get('/', anonOnly);
        

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

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

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

        总而言之,登录逻辑由静态 Express 视图处理。此外,Express 很少向 Angular 应用程序打印 constant,其中包含例如用户数据。对于显示非常有用,例如某个时候的用户名。

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

        【讨论】:

          猜你喜欢
          • 2020-02-28
          • 2014-01-14
          • 2012-04-23
          • 2017-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-09
          • 2016-04-13
          相关资源
          最近更新 更多