我使用MEAN堆栈作为app
,我有用户注册并使用satellizer
登录一切正常。
但是,当我尝试get
用户的ID时,我什么也得不到,我可以请求获取所有用户但不是id。
注意我使用Ionicframework作为forntEnd框架。 这是我的后端终点的代码:
app.get('/api/me', function(req, res) {
User.findById(req.user, function(err, user) {
console.log(req.user);
console.log(user);
res.send(user);
});
})
我的前端代码控制器:
.controller('ProfileCtrl', function($scope, $http, $stateParams, $ionicLoading, $timeout, $stateParams) {
$ionicLoading.show({
template: 'Loading...'
});
$http.get('http://localhost:3000/api/me')
.success(function(data) {
console.log("Recived data via HTTP", data);
$timeout(function() {
$ionicLoading.hide();
$scope.user = data;
}, 1000);
})
.error(function() {
console.log("Error while getting the data");
$ionicLoading.hide();
});
})
请求标题:
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ar;q=0.6,fi;q=0.4,it;q=0.2,en-GB;q=0.2,en-CA;q=0.2
Authorization:Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1NTAxYjAxMmExMjRlZjIwMTc4M2ExMTQiLCJleHAiOjE0MjcxMzk0NDV9.x9QEdE4E-Vh1SklCheiZqsnJsg8jGzdJnPx2RXeZqS8
Connection:keep-alive
Host:localhost:3000
Origin:http://localhost:8100
Referer:http://localhost:8100/
答案 0 :(得分:3)
您错过了服务器调用中的重要部分,即“ensureAuthenticated”:
app.get('/api/me', ensureAuthenticated, function(req, res) {
User.findById(req.user, function(err, user) {
res.send(user);
});
});
这个卫星示例实现的ensureAuthenticate
是一个非常简单的版本,它只将token.sub的内容放入req.user。这对您的查询来说已经足够了。通常在真实的应用程序中,人们会使用护照中间件,将用户加载到中间件并将其放入req.user。
当使用平均堆栈时,通常将req.user
设置为完整的用户对象,即mongoose文档的实例。您想按ID搜索,因此请为查询提供一个ID:
尝试
User.findById(req.user._id, function(err, user) {
代替。
但是,考虑到req.user已经完全是您要查询的对象,可能根本不需要整个查询。
如果要查找与经过身份验证的用户不同的用户,则需要在URL路径中传递要查询的ID,通常类似于:
GET /api/users/{id}
然后您可以使用
获取此IDreq.params.id
并将其传递给findById()
电话