如何更改一个路由的Http字段" withCredentials"为假

时间:2015-08-22 00:06:35

标签: angularjs restangular

作为我正在建立的新注册表单的一部分,我需要列出所有可用的"机构"我当时有空,这样用户就可以告诉我他们正在注册哪一个。

在后端策略中,我已将控制器操作设置为公共:

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方式。有谁知道怎么做?

最佳, 扎克

1 个答案:

答案 0 :(得分:1)

我明白了。

Restangular添加了一种方法来为每个请求设置自定义http字段。我已为这一个请求手动设置withCredentials : false。我修改后的后端调用现在看起来像这样:

return Restangular.all('institutions')
     .withHttpConfig({ withCredentials: false}).getList();

之前。

return Restangular.all('institutions').getList();