26

我正在构建一个简单的网站,我想让用户使用 Facebook 登录,然后根据他们是否登录显示一个包含自定义项目的页面。即,如果没有登录,它会显示一些信息,但如果登录,它会根据他们的用户信息显示其他信息。

我正在使用 passportjs Facebook 模块、Express 和 Angular。我相信我已经正确实施了护照,但不知道 1)我应该如何检查用户是否已登录,以及 2)使用 Angular 和 Express 根据用户状态显示视图的最佳实践。我在这里查看了一个示例,但不要认为这是我应该使用 Angular 做的事情(https://github.com/jaredhanson/passport-facebook

谢谢!

4

2 回答 2

51

要完成@wpalahnuk 答案,您必须创建一个服务或工厂来处理身份验证和一个 httpInterceptor 来拦截服务器发送的响应,以了解用户是否登录(检查状态代码 401)。

对于 Express 部分,您必须使用出色的护照节点模块来处理服务器端身份验证。

您在这里有所有详细信息:https ://vickev.com/#!/article/authentication-in-single-page-applications-node-js-passportjs-angularjs

这篇文章真的很棒,Brad Green(Google 的 AngularJS 工程总监)推荐了这篇文章。

希望能帮助到你。

如果您想了解更多有关 Angular 安全性的信息,您只需提出问题,我们将非常乐意为您提供帮助。

于 2013-09-16T19:22:43.960 回答
3

我不使用 node.js 和 express,而是使用安全社交来玩游戏!框架,但我认为过程是相似的。

您需要创建一个服务来联系服务器以获取用户登录状态,然后存储此变量。然后,您可以将此服务注入需要了解或更改用户登录状态的每个控制器。

这个博客是我从以下位置获得实现的地方:http: //blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app

这是服务:

services.factory('UserService', [function() {
    var sdo = {
        isLogged: false,
        username: ''
    };
    return sdo;
}]);

这是在控制器中登录用户的示例

var User = UserService
scope.login = function() {
    var config = { /* ... */ } // configuration object

    $http(config)
    .success(function(data, status, headers, config) {
        if (data.status) {
            // succefull login
            User.isLogged = true;
            User.username = data.username;
        }
        else {
            User.isLogged = false;
            User.username = '';
        }
    })
    .error(function(data, status, headers, config) {
        User.isLogged = false;
        User.username = '';
    });
}

我真的建议您阅读博客文章,因为它更详细地介绍了这一点,并且还有一些其他相关文章

然后,您可以使用 User.isLogged 变量来隐藏或显示不同的元素,并使用它来确定哪些路线可用

于 2013-09-14T21:23:38.337 回答