首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将数据传递给水手中的默认控制器。

将数据传递给水手中的默认控制器。
EN

Stack Overflow用户
提问于 2015-01-06 04:16:56
回答 2查看 1.3K关注 0票数 2

我有一个用户模型和一个小部件模型。我在用户和小部件之间建立了关系。我还为身份验证定义了一个策略,如果用户是经过身份验证的,那么我将在req.session中保存用户ID。

小部件上需要用户:

代码语言:javascript
代码运行次数:0
运行
复制
attributes: {
user: {model: 'user', required: true}
}

是否有办法让WidgetController从auth策略中使用用户,并且仍然使用蓝图提供的所有默认操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-06 18:27:46

正如文茨在他的回答中所写的那样,政策是实现这一目标的一个很好的方法。但是,不建议更改req.bodyreq.query,因为您可能希望访问它们的原始值。相反,您可以使用req.options.values为蓝图值提供默认值。例如,要将name值默认为登录用户的名称,可以创建一个类似于以下策略的策略:

代码语言:javascript
代码运行次数:0
运行
复制
module.exports = function defaultNamePolicy (req, res, next) {

  // Make sure req.options.values is an object, and don't overwrite
  // values from prior policies
  req.options.values = req.options.values || {};

  // If there's a logged in user, default to using their name.      
  // Otherwise this will be undefined and will have no effect
  req.options.values.name = req.session.user && req.session.user.name

  return next();

}

req.options.values中的值用作请求的默认值,因此如果存在req.param('name'),则将使用它而不是req.options.values.name

票数 3
EN

Stack Overflow用户

发布于 2015-01-06 07:24:17

是的,有:)您可以使用策略来实现这一点:)

代码语言:javascript
代码运行次数:0
运行
复制
module.exports = function(req, res, next) {
                            if(req.session.user){
                              //then it depends on your implementation but 
                              req.params["widget"].user=req.session.user
                              //cab be req.query["widget"] or req.body["widget"]
                              /*
                                 if(req.params["widget"]){
                                   req.params["widget"].user=req.session.user   
                                 }
                                 if(req.query["widget"]){
                                   req.query ["widget].user=req.session.user
                                 }
                                 if(req.body["widget"]){
                                    req.body ["widget].user=req.session.user
                                 }
                              */
                            }
                            //other stuff
                            next();
                 }

您还可以通过这样的操作来使此变得更通用

代码语言:javascript
代码运行次数:0
运行
复制
var model = req.options.model || req.options.controller;
if(model && sails.models[model].attributes['user']){
     //do the same trick
}

如果在session中存储“用户”完整对象,则调整代码并使用req.session.user.id

编辑

我很抱歉,我使用自定义蓝图和查询,因为我使用的是帆、成员蓝图:)然而,如果我的内存是正确的,您只需检查req.params["user"]req.query["user"]就可以了。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27792020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档