我开发了一个单页应用程序原型(prototype),它在前端使用 Backbone,并从服务器上的瘦 RESTful API 获取数据。
我从事过繁重的服务器端应用程序开发(php 和 python),我非常喜欢使用厚客户端 MVC 的新的不同设计方法,但对如何最好地将应用程序限制为登录的经过身份验证的用户感到困惑。
我更喜欢让应用程序本身支持登录,并且除了网站的 native 登录之外,最终还想实现其他类型的登录(openid、fb connect 等)。我不清楚这是如何完成的,并且一直在搜索 - 但是未能找到让我清楚的信息。
总的来说,当前注册用户并要求他们登录才能使用您的单页面应用程序的最佳做法是什么?
用户登录后,如何对 api 请求进行身份验证?我可以存储一个 session ,但是我如何在 API 调用中检测到这个 session ,或者我是否必须在每个 API 调用中传递一个 token ?对此的任何答案将不胜感激!
最佳答案
我见过的最 RESTful 方式是基于 OAuth 客户端凭据流程,基本上是一个/token 端点,您将用户名/密码发布到该端点,返回该 session 的访问 token 。此后的每个 ajax 请求都会附加一个带有 token 的 Authorization
不记名 header 。您可以将 token 存储在一个全局变量中,以便在页面刷新/关闭之前一直保留它,使用本地存储让用户在 session 之间保持登录状态,或者使用 javascript cookie。如果您不喜欢 token 的想法,那么您可以只使用旧的 cookie 方法,它无论如何都会自动发送任何 ajax 请求。
至于 facebook/google 等,我通常遵循 stackoverflow 方法,将外部用户登录关联到一个帐户。然后使用相当普通的基于服务器的 oauth 舞蹈(尽管您可以通过稍作修改将对服务器的所有请求替换为 ajax 请求,但我发现它并没有太大区别,因为无论如何您都需要在您和服务器之间进行重定向)。我通常会为 Facebook 登录发布一个加密的 cookie,然后我使用与上述类似的方法将其转换为 token (只需将 cookie 与请求一起发送,而不是用户名/密码)。
关于javascript - 单页应用程序上的用户身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12501359/