【发布时间】:2014-11-12 04:14:57
【问题描述】:
我不知道如何在我的 AngularJS 应用程序中进行简单的身份验证。 使用我的设置进行正常服务器端身份验证的最佳和最简单的方法是什么: Yeoman 角度生成器,在 :9000 上运行 grunt 服务器。 谁有好的教程?或任何提示?
另一个问题,使用此设置存储数据的最简单方法是什么?使用 MongoDB?
谢谢你:)
【问题讨论】:
我不知道如何在我的 AngularJS 应用程序中进行简单的身份验证。 使用我的设置进行正常服务器端身份验证的最佳和最简单的方法是什么: Yeoman 角度生成器,在 :9000 上运行 grunt 服务器。 谁有好的教程?或任何提示?
另一个问题,使用此设置存储数据的最简单方法是什么?使用 MongoDB?
谢谢你:)
【问题讨论】:
AngularJS 是一个前端 JavaScript 框架,您可以在后端为您的应用程序使用您喜欢和了解的任何东西。这个问题就像你在问“我正在使用 HTML5,我应该在后端使用什么?” Angular 可以与许多服务器端语言一起使用,即。 Ruby、Node、PHP。
再次根据要求,您应该在 SQL 或 NoSQL 数据库之间进行选择。还取决于服务器端语言的选择。
【讨论】:
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) 会让你的生活变得轻松。
【讨论】:
您最好的选择是使用 angular-fullstack 生成器,因为它带有内置的基本身份验证(本地身份验证和 oAuth)。从那里,您可以只使用身份验证是为您设置的,或者您可以将其用作参考,以帮助您了解其所有工作原理。
【讨论】:
sudo npm install -g generator-angular-fullstack?
npm install?
我使用的最简单的设置是:
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,其中包含例如用户数据。对于显示非常有用,例如某个时候的用户名。
虽然设置它可能需要一些时间,但如果您想了解应用程序的整个逻辑,绝对值得这样做。我已经为您提供了要使用的开源软件包的名称,所有详细信息都可以在他们的自述文件和指南中找到(如果您搜索一段时间,其中很多已经存在)。
【讨论】: