如果用户没有登录,我如何拒绝他们访问我的骨干应用程序的部分内容


How can I deny users access to parts of my Backbone App if they have not logged in?

所以我有一个Backbone应用程序+网页。现在,如果你登录我的网站,我会从数据库中创建一个全局对象,其中包含你的用户详细信息。但是,您仍然可以直接点击应用程序中的其中一条路由。

我应该如何处理未"登录"的用户,并将他们重定向到"您必须登录的页面"?

这是标准操作吗?基本上,我有一个REST url设置,只返回

{ sessionId: [php-session-id-here] }

如果他们登录了,它会返回更像这样的东西:

{
  sessionId: [php-sess-id],
  userId: [user-id-from-db],
  firstName: [f-name],
  lastName: [l-name]
}

想法?谢谢

我过去所做的是在每个页面上与jQuery(实际上,添加到jQuery文件中)一起包含AJAX方法的扩展,以检查用户未登录时我发送的自定义代码。当看到该值时,它会将用户重定向到登录页面,而不管发生了什么。

这是因为该网站在登录时有一段时间,所以用户坐在页面上时可能会被注销,然后AJAX请求就会失败。如果你在登录时没有超时,那么看到这个问题的几率很小。忽略来自未登录用户的请求即可。

如果您需要编码方面的帮助,请从这里开始:扩展Ajax:预过滤器、转换器和传输。


真的不需要像伪代码那样复杂的东西:

  1. JS需要做一些AJAX,所以JS与服务器对话
  2. 如果需要,PHP会检查登录
  3. 如果没有登录,则发回中止消息(我使用转换器捕获"notLoggedIn"dataType。然而,这也可以通过传输来完成,它们只是更复杂。)
  4. JS看到中止消息并执行window.location重定向,而不是返回AJAX消息

如果你愿意,你可以加载一个带有登录表单的灯箱,并通过AJAX将其发送到PHP,在那里可以重新登录,如果你记得AJAX尝试失败,你可以在登录后再次发送。然后用户甚至不需要离开页面就可以重新登录。

如果您使用jQuery,您可以设置一个全局ajaxSetting,它允许您对某些http代码执行某些操作。我读到的一些页面建议在JSON中添加一个url字段来指向登录位置,但我认为这完全取决于您。因此,实现我提到的内容所需的唯一修改是1。将http代码更改为合理的代码,如401(未经授权),并实现http代码处理程序。但我不会称之为这个标准,我只想说这是几个人(包括我自己)所做的。

<?php 
function IsLoggedIn()
{
    if(isset($_SESSION['id'])) // Change that to what you want
{
    return 1;
}
    else
{ 
    return 0; 
} 
}
?>

然后在代码中,您可以使用以下内容:if(isLogged()){ header('Location: http://google.com'); }