CakePHP正在检索用户模型,但默认未返回密码
我正在编写一个API,它以JSON格式返回符合特定条件的所有用户及其关联模型 我的问题是——在将用户数据返回给获取JSON数据的客户机时,如何使其自动不返回哈希密码字段?这似乎应该是一个标准问题,但如果不使用contain/fields,是否可以使其在执行简单查找时不返回哈希密码 谢谢 您可以使用模型从结果集中删除密码,如下所示:CakePHP正在检索用户模型,但默认未返回密码,cakephp,Cakephp,我正在编写一个API,它以JSON格式返回符合特定条件的所有用户及其关联模型 我的问题是——在将用户数据返回给获取JSON数据的客户机时,如何使其自动不返回哈希密码字段?这似乎应该是一个标准问题,但如果不使用contain/fields,是否可以使其在执行简单查找时不返回哈希密码 谢谢 您可以使用模型从结果集中删除密码,如下所示: public function afterFind($results = array(), $primary) { foreach($results as $
public function afterFind($results = array(), $primary) {
foreach($results as $key => $value) {
if(isset($results[$key][$this->modelAlias]['password'])) {
unset($results[$key][$this->modelAlias]['password']);
}
}
}
您可以使用模型从结果集中删除密码,如下所示:
public function afterFind($results = array(), $primary) {
foreach($results as $key => $value) {
if(isset($results[$key][$this->modelAlias]['password'])) {
unset($results[$key][$this->modelAlias]['password']);
}
}
}
我倾向于在
beforeFind()
中执行此操作,以便请求包含密码:
public function beforeFind( $query ) {
# Don't return the password field unless it's specified.
$query['fields'] = empty( $query['fields'] )
? array_diff( array_keys( $this->schema() ), array( 'password' ) )
: $query['fields'];
return $query;
}
这样,如果明确指定了密码,我就不会删除它(有时这很有用),但在其他情况下都会删除。此解决方案不一定比标记答案更好或更差,但确实提供了一点灵活性,我发现这很有用。我倾向于在
beforeFind()中执行此操作,以便可以请求包含密码:
public function beforeFind( $query ) {
# Don't return the password field unless it's specified.
$query['fields'] = empty( $query['fields'] )
? array_diff( array_keys( $this->schema() ), array( 'password' ) )
: $query['fields'];
return $query;
}
这样,如果明确指定了密码,我就不会删除它(有时这很有用),但在其他情况下都会删除。此解决方案不一定比标记的答案更好或更差,但确实提供了一点灵活性,我发现这很有用。您应该首先使用isset(),以避免在数据中没有密码密钥的情况下引起注意@标记为very true,尽管使用Auth时始终会有一个密码密钥,即使密码为空,您是否不需要在结尾返回$results
?您应该首先使用isset(),以避免在数据中没有密码密钥时引起注意@标记为very true,尽管使用Auth时始终会有一个密码密钥,即使密码为空,您不需要在结尾返回$results
?很好的解决方案!!除了性能更好之外,这必须比在afterFind()
@Rob中循环遍历每条记录性能更好。我发现了一个问题:如果find中加入了关联的模型,这将删除这些模型。有什么解决方法吗?@SDP你能更具体地说明你的意思吗?@RobWilkerson例如,如果Containable用于一次返回多个模型的结果,那么必须列出所有(或没有)字段才能工作。如前所述,我们仅用当前模型模式的字段替换原始(空白)查询。有效地清除关联的模型数据。有道理吗?是的。这绝对是这个例子的一个问题。在您的情况下,您可能必须检查$query
,并使更新更加外科化。这是一个很好的解决方案!!除了性能更好之外,这必须比在afterFind()
@Rob中循环遍历每条记录性能更好。我发现了一个问题:如果find中加入了关联的模型,这将删除这些模型。有什么解决方法吗?@SDP你能更具体地说明你的意思吗?@RobWilkerson例如,如果Containable用于一次返回多个模型的结果,那么必须列出所有(或没有)字段才能工作。如前所述,我们仅用当前模型模式的字段替换原始(空白)查询。有效地清除关联的模型数据。有道理吗?是的。这绝对是这个例子的一个问题。在您的案例中,您可能必须检查$query
,并使更新更具外科手术性。