我正在尝试使用Backbonejs和SLIM框架开发应用程序。现在我想开发用户登录/注销功能。在这种情况下,当用户从一个页面导航到另一个页面时,我想让SESSION在服务器中保持活动状态。以前我使用过另外一个PHP框架和核心PHP并成功实现了用户身份验证。 SLIM框架用作API。实际上我的问题是“如何使用来自Backbonejs的API的HTTP请求知道当前的SESSION是否存在?”
我看起来很乱。我读了几个stackoverflow帖子,如下所示,但无法找到解决方案。
How to do authentication with a REST API right? (Browser + Native clients)
If REST applications are supposed to be stateless, how do you manage sessions?
How to use PHP sessions with REST client application ?
我希望你们中的任何人使用Backbonejs和SLIM Framework作为API实现用户身份验证。如果他/她分享他/她的一些示例代码的经验,那将是一个很大的帮助。
由于
答案 0 :(得分:2)
我不确定Slim API。但是,使用Restful Web服务,没有会话概念。
相反,您可以拥有一个带有身份验证令牌的http标头令牌,此令牌可以保留在表中(例如,用户表)。可以进行检查以确保每次请求到达服务器时令牌是否有效。在注销时取消令牌。
后验证,从登录操作的成功回调中,您可以触发已加载成功页面的自定义事件。
EG:
在应用程序级别进行初始化。
var controller = _.extend({}, Backbone.Events);
controller.on("myapp:dashboard",function() {
//your dashboard data fetch logic.
//create instance of the view and pass fetched data.
});
登录成功处理程序(回调)中的进行以下调用:
Delegates to the custom controller.
controller.trigger("myapp:dashboard");
Changes the url to the correct location.
myAppRouter.navigate("tourl",{trigger:false});
答案 1 :(得分:0)
我同意巴拉吉,但他并不准确。 REST会话,但您必须将其保留在客户端。如果要在会话中写入任何内容,则必须将其与响应主体一起发回,以便客户端可以处理和存储它。如果您想从会话中读取任何内容,则必须将其与请求一起发送,以便服务器可以处理它。
因此,如果您想要进行访问控制,则应将用户名和密码保留在客户端的内存中,并覆盖backbone.sync()
以便每次都发送auth标头。在授权之前的服务器端,您必须通过memcached使用{username+password} -> {identity+permissions}
缓存来验证每个请求。通过SLIM你需要提取标题,我不认为这会导致问题。 SLIM没有内置的身份验证和授权支持,因为它只是一个HTTP库,因此您需要另一个工具来实现该部分。