Javascript 在用户通过Facebook身份验证后,您如何证明该用户已通过身份验证?
我正在学习教程,用Node和Passport实现Facebook身份验证 本教程和演示文稿都说明了如何做到这一点:Javascript 在用户通过Facebook身份验证后,您如何证明该用户已通过身份验证?,javascript,node.js,passport.js,passport-facebook,Javascript,Node.js,Passport.js,Passport Facebook,我正在学习教程,用Node和Passport实现Facebook身份验证 本教程和演示文稿都说明了如何做到这一点: router.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/', failureRedirect: '/login' }) ); 但是,用户如何知道他们是否经过身份验证?我想把数据发送到我的前端,显示用户是否登录,我可以用它来更新,
router.get('/auth/facebook/callback',
passport.authenticate('facebook', {
successRedirect: '/',
failureRedirect: '/login'
})
);
但是,用户如何知道他们是否经过身份验证?我想把数据发送到我的前端,显示用户是否登录,我可以用它来更新,比如我的导航栏
据我所知,使用Facebook进行身份验证的过程如下:
// Authentication service for user variables
angular.module('users').factory('Authentication', [
function() {
var _this = this;
_this._data = {
user: window.user
};
return _this._data;
}
]);
GET/auth/facebook
请求304重定向
使用url发回Facebook门户304重定向
,url是你的回调urlGET/auth/facebook/callback
passport.use(obj,cb)
的cb
运行304重定向
,url为/
或/login
,具体取决于成功或失败/
或/login
router.get('/auth/facebook/callback',
passport.authenticate('facebook'),
function(req, res) {
var userCopy = JSON.parse(JSON.stringify(req.user));
delete userCopy.auth;
res.status(200).json(userCopy);
}
);
这不起作用,因为没有接收数据的$http.get().then()
我尝试添加一些查询参数:
successRedirect: '/?foo=bar'
但这对我不起作用。url栏显示http://localhost:3000/?foo=bar#_=_
这不会记录任何内容:
app.get('/*', function(req, res) {
var url = path.resolve(__dirname + '/../client/' + envFolder + '/index.html');
res.sendFile(url, null, function(err) {
if (err) {
return res.status(500).send(err);
}
console.log('here');
console.log(req.query);
return res.status(200).end();
});
});
当我执行成功重定向:'/home?facebook=true'
时,它就会工作。但是在sendFile
中,我无法发送任何其他内容。如果我尝试res.send('Authenticated with Facebook')
它会给我这个错误:错误:发送后无法设置头。
。大概是因为sendFile
正在发回文件并设置一些标题,然后我尝试用不同的标题发回其他内容。所以我不知道该怎么办
我采用的方法是使用
run
块:
function run($http, Session, $cookies) {
$http
.get('/current-user')
.then(function(response) {
Session.setUser(response.data);
$cookies.put('userId', response.data._id);
})
;
}
您可以在视图中渲染用户对象,因此可以通过角度检查变量的存在来获得:
router.get('/auth/facebook/callback',
passport.authenticate('facebook'),
function(req, res) {
var userCopy = JSON.parse(JSON.stringify(req.user));
delete userCopy.auth;
res.status(200).render('index', {user: userCopy});
}
);
您的HTML索引文件应具有:
<!--Embedding The User Object-->
<script type="text/javascript">
var user = <%= user | json | safe %>;
</script>
在主控制器中插入自动授权服务并使用用户对象:
angular.module('core').controller('MainController', ['$scope', 'Authentication',
function ($scope, Authentication) {
$scope.authentication = Authentication;
}
]);