2

我正在开发一个基于身份验证的应用程序,用户必须登录才能访问网站的某些路由。我还没有找到关于如何实现这一点的文档,所以我想出了一个关于如何解决它的想法。

这是我知道用户是否登录的功能:

App.filterAuth = function(navigateTo) {
    navigateTo = typeof navigateTo !== 'undefined' ? navigateTo : '#';

    if (App.logged == false) {
        App.vent.trigger('navigate', navigateTo);
    }
};

我的想法是,当用户登录时设置App.logged = true. 然后,当我的路由器尝试执行一个具体的路由器时,我可以调用App.filterAuth(). 这实际上有效并进行了一些调试,我发现一切都被触发了。

问题?例如,我在为用户加载图像提要的受保护路由上执行此操作。执行时App.filterAuth(),我看到它尝试导航到,#但此提要视图的执行并未停止,并且与我的#路线关联的视图也未触发。

关于如何改进此功能以使其正常工作的任何想法?

提前致谢!

4

1 回答 1

0

这可能不是直接问题的答案,但有一个骨干插件可以帮助您完成您尝试做的事情:https ://github.com/boazsender/backbone.routefilter

您可以指定其他方法,这些方法将在处理路由代码之前/之后触发。如果您在回调之前返回 false ,则不会评估路由器代码:https ://github.com/boazsender/backbone.routefilter#returning-false-from-within-a-before-filter

因此,您可以在过滤器之前创建,它可以检查是否应该保护路由。如果它是安全的并且用户未经过身份验证,则您只需返回 false 并且不使用路由器代码。

于 2013-07-30T08:56:04.407 回答