我正在编写一个API,它返回符合特定条件的所有用户及其相关模型的JSON格式。
我的问题是 - 在将用户数据返回到获取我的JSON数据的客户端时,如何自动使其不返回哈希密码字段?这似乎应该是一个标准问题,但是如果不使用包含/字段,我是否可以将其设置为默认行为是每当我进行简单查找时它不会返回散列密码?
谢谢!
答案 0 :(得分:4)
我倾向于在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;
}
这样,如果明确指定了密码(有时这很有用),我不会删除密码,但在其他情况下都会这样做。这个解决方案不一定比标记答案更好或更差,但确实提供了一些我觉得有用的灵活性。
答案 1 :(得分:2)
您可以使用模型afterFind()
从结果集中删除密码,如下所示:
public function afterFind($results = array(), $primary) {
foreach($results as $key => $value) {
if(isset($results[$key][$this->modelAlias]['password'])) {
unset($results[$key][$this->modelAlias]['password']);
}
}
}