我正在构建一个简单的网站,我想让用户使用Facebook登录,然后根据他们是否登录显示一个包含自定义项目的页面。 即,如果没有记录,它会显示一些信息,但如果登录,它会根据他们的用户信息显示其他信息。
我正在使用passportjs Facebook模块,Express和Angular。我相信我已经正确实现了护照,但不知道1)我应该如何检查用户是否已登录,以及2)使用Angular&Express根据用户状态显示视图的最佳实践。我在这里看了一个示例,但不要认为这是我应该使用 Angular (https://github.com/jaredhanson/passport-facebook) 做的事情
谢谢!
要完成@wpalahnuk答案,您必须创建一个服务或工厂来处理身份验证,并创建一个 httpInterceptor 来拦截服务器发送的响应,以了解用户是否是日志(检查 staus 代码 401)。
对于快递部分,您必须使用很棒的护照节点模块来处理服务器端身份验证。
您在这里拥有所有详细信息:https://vickev.com/#!/article/authentication-in-single-page-applications-node-js-passportjs-angularjs
这篇文章真的很棒,Brad Green(Google for AngularJS的工程总监)让我写了这篇文章。
希望对您有所帮助。
如果您想了解有关 Angular 安全性的更多信息,您只需询问一下,我们非常乐意为您提供帮助。
我不使用node.js和表达,而是为游戏提供安全的社交! 框架,但我认为过程是相似的。
您需要创建一个服务,该服务与服务器联系以获取用户登录状态,然后存储此变量。然后,您可以将此服务注入需要了解或更改用户登录状态的每个控制器。
这个博客是我从中得到我的实现的地方: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.isLogs 变量隐藏或显示不同的元素,并使用它来确定哪些路由可用