public static function check($name, $credentials = null, array $options = array())
{
$config = static::config($name);
$defaults = array('checkSession' => true, 'writeSession' => true, 'persist' => $config['session']['persist'] ?: static::_config('persist'));
$options += $defaults;
$params = compact('name', 'credentials', 'options');
return static::_filter(__FUNCTION__, $params, function ($self, $params) {
extract($params);
$config = $self::invokeMethod('_config', array($name));
if ($config === null) {
throw new ConfigException("Configuration `{$name}` has not been defined.");
}
$session = $config['session'];
if ($options['checkSession']) {
if ($data = $session['class']::read($session['key'], $session['options'])) {
return $data;
}
}
if ($credentials && ($data = $self::adapter($name)->check($credentials, $options))) {
if ($options['persist'] && is_array($data)) {
$data = array_intersect_key($data, array_fill_keys($options['persist'], true));
} elseif (is_array($data)) {
unset($data['password']);
}
return $options['writeSession'] ? $self::set($name, $data) : $data;
}
return false;
});
}