作为我正在建立的新注册表单的一部分,我需要列出所有可用的"机构"我当时有空,这样用户就可以告诉我他们正在注册哪一个。
在后端策略中,我已将控制器操作设置为公共:
InstitutionController: {
// Some other policies I edited out
'all': true
},
控制器是您的标准"获取所有对象"控制器动作。
all: function (req, res) {
Institution
.find()
.exec(function (err, institutions) {
if (err) { return res.json(err.status, err); }
return res.json(institutions);
});
},
因此,在AngularJS前端,我甚至可以在用户登录之前在我的控制器中使用Institutions.all()
。这就是这种情况,但在后端passport
尝试序列化并在(不存在的)用户执行此方法之前反序列化。
因此,我在API控制台上收到了此错误:
error: Server Error:
error: Error: Failed to deserialize user out of session
at pass (/home/zacharyhustles/texasca-API/node_modules/passport/lib/authenticator.js:340:19)
at deserialized (/home/zacharyhustles/texasca-API/node_modules/passport/lib/authenticator.js:345:7)
at bound (/home/zacharyhustles/texasca-API/node_modules/lodash/dist/lodash.js:957:21)
.......
当我尝试执行此控制器方法InstitutionController.all()
时,如何避免护照序列化和反序列化用户?
更新
问题是此请求正在发送withCredentials: true
,因为我的应用程序的true
文件中将带有restangular的HTTP字段的默认设置设置为app.js
:
app.js
RestangularProvider.setDefaultHttpFields({ withCredentials: true });
如果我将其设置为" false"问题已经解决了。但是,我确实希望向服务器发送大多数请求" withCredentials"所以我需要一种方法来为这一个请求做一个例外。正如您所看到的,我在我的应用程序中使用Restangular,所以希望我可以使用Restangular方式。有谁知道怎么做?
最佳, 扎克
答案 0 :(得分:1)
我明白了。
Restangular添加了一种方法来为每个请求设置自定义http字段。我已为这一个请求手动设置withCredentials : false
。我修改后的后端调用现在看起来像这样:
return Restangular.all('institutions')
.withHttpConfig({ withCredentials: false}).getList();
之前。
return Restangular.all('institutions').getList();