0

我正在使用 Angular.js、passport 和 connect-ensure-login 开发 node.js 应用程序。

仅在刷新(F5)时,resureLoggedIn 中的重定向似乎有效并且我进入登录页面,否则我认为单页应用程序的 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/

4

1 回答 1

1

您可能想通过使用$httpProvider.interceptors.

在您的情况下,您可以捕获500来自的错误/api/users(尽管返回 a 401or可能更好403)并启动拦截器并将用户带到/login.

这是官方文档:

http://docs.angularjs.org/api/ng/service/ $http#interceptors

这是一个更具体的例子:

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

这是一个类似的答案。

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

于 2014-04-21T03:30:17.987 回答