如何让ensureLoggedIn使用routeProvider

时间:2014-04-21 03:13:49

标签: angularjs node.js passport.js route-provider

我正在使用Angular.js,passport和connect-ensure-login工作在node.js应用程序上。

仅在刷新(F5)时,ensureLoggedIn中的重定向似乎工作,我进入登录页面,否则我认为单页应用程序的routeProvider只接管正常点击,我到 localhost:3000 / users 仍然是来自'/ api / users'的500错误。

如何让 connect-ensure-login (ensureLoggedIn)同时适用于直接路径和点击?

app.get('/users', ensureLoggedIn('/login'))

对于API,我正在使用

app.get('/api/users', 
    passport.authenticate('bearer'),
    ...

应用程序的routeProvider代码段:

.config(function($routeProvider, $locationProvider) {
        $routeProvider
            .when('/', {
                templateUrl: 'views/home.html'
            })
            ...

参考文献:

https://www.npmjs.org/package/connect-ensure-login

http://passportjs.org/

1 个答案:

答案 0 :(得分:1)

您可能希望通过使用$httpProvider.interceptors来解决此问题。

在您的情况下,您可以发现来自500的{​​{1}}错误(尽管可能更好地返回/api/users401)并拦截并接受拦截用户403

这是官方文件:

http://docs.angularjs.org/api/ng/service/ $ HTTP#拦截器

这是一个更具体的例子:

http://blog.thesparktree.com/post/75952317665/angularjs-interceptors-globally-handle-401-and-other

这是一个类似的答案。

https://stackoverflow.com/a/18764801/115015