我正在编写一个 API,它以 JSON 格式返回符合特定条件的所有用户及其关联模型。
我的问题是——在将用户数据返回给获取 JSON 数据的客户端时,如何使其自动不返回哈希密码字段?这看起来应该是一个标准问题,但是在不使用包含/字段的情况下,我可以使其默认行为是每当我进行简单查找时它都不会返回哈希密码吗?
谢谢!
我倾向于在
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;
}
这样,如果明确指定了密码,我不会删除密码(有时这很有用),但在其他情况下都会这样做。这个解决方案不一定比标记的答案更好或更差,但确实提供了一些我发现有用的灵活性。
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']);
}
}
}