【发布时间】:2013-08-21 22:19:20
【问题描述】:
Angular+RESTful 客户端通信 w/API 用于 Auth/(re)Routing
这已经在几个不同的问题和几个不同的教程中讨论过,但是我之前遇到的所有资源都没有完全准确。
简而言之,我需要
- 通过 POST 从
http://client.foo登录到http://api.foo/login - 为提供
logout路由的用户提供“已登录”GUI/组件状态 - 能够在用户注销/注销时“更新”用户界面。 这是最令人沮丧的
- 保护我的路由以检查身份验证状态(如果他们需要)并相应地将用户重定向到登录页面
我的问题是
- 每次我导航到不同的页面时,我都需要调用
api.foo/status来确定用户是否已登录。(ATM 我使用 Express 作为路由)这会导致打嗝,因为 Angular 会确定事情喜欢ng-show="user.is_authenticated" - 当我成功登录/注销时,我需要刷新页面(我不想这样做)以填充诸如
{{user.first_name}}之类的内容,或者在注销的情况下,清空该值.
// Sample response from `/status` if successful
{
customer: {...},
is_authenticated: true,
authentication_timeout: 1376959033,
...
}
我的尝试
- http://witoldsz.github.io/angular-http-auth/1
- http://www.frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/2
-
https://github.com/mgonto/restangular(在我的一生中,我无法弄清楚如何使用
post data而不是query params使用POST。文档对此事一无所获。
为什么我觉得我疯了
- 似乎每个教程都依赖于一些数据库(大量的 Mongo、Couch、PHP+MySQL 等)解决方案,没有一个教程完全依赖与 RESTful API 的通信来保持登录状态。登录后,会使用
withCredentials:true发送额外的 POST/GET,所以这不是问题 - 我找不到任何执行 Angular+REST+Auth、无后端语言的示例/教程/存储库。
我不太骄傲
诚然,我是 Angular 的新手,如果我以一种荒谬的方式处理这个问题,我不会感到惊讶;如果有人提出替代方案,我会很高兴——即使是从汤到坚果。
我使用Express 主要是因为我真的很喜欢Jade 和Stylus — 我没有嫁给Express' 路由,如果我想做的事情只有通过Angular 的路由。
提前感谢任何人提供的任何帮助。请不要让我用谷歌搜索它,因为我有大约 26 页的紫色链接。 ;-)
1此解决方案依赖于 Angular 的 $httpBackend 模拟,目前尚不清楚如何使其与真实服务器通信。
2这是最接近的,但由于我有一个需要进行身份验证的现有 API,我无法使用护照的“localStrategy”,而且它似乎疯狂编写一个 OAUTH 服务……只有我打算使用。
【问题讨论】:
-
$cookie 是否没有解决您每次调用服务器的问题?如果您使用某些服务来管理范围内的变量,也许您不需要刷新页面。对不起,如果我误解了你的问题......
-
我没有使用
$cookie或$cookieStore。 cookie(由服务器创建)被返回并存储在浏览器中,当我进行其他需要身份验证的 REST 调用时,我在调用中设置了withCredentials:true。这工作正常,它保持登录状态,并保护/隐藏路由,直到该用户登录我遇到问题。 -
@JonSamwell - 这太棒了,这个线程已经等了将近一年的答案。请将此列为答案并提供详细信息/代码的快速概述,我会将其标记为已接受。非常感谢。
-
@couzzi - 看看我的回答 - 我真的很高兴它有帮助
标签: javascript angularjs node.js restful-authentication angular-http-interceptors