/**
* Authenticates a user, with "remember" flag.
*
* @param \Cartalyst\Sentinel\Users\UserInterface|array $credentials
* @param bool $remember
* @param bool $login
* @return \Cartalyst\Sentinel\Users\UserInterface|bool
*/
public function authenticate($credentials, $remember = false, $login = true)
{
$response = $this->fireEvent('sentinel.authenticating', $credentials, true);
if ($response === false) {
return false;
}
if ($credentials instanceof UserInterface) {
$user = $credentials;
} else {
$user = $this->users->findByCredentials($credentials);
$valid = $user !== null ? $this->users->validateCredentials($user, $credentials) : false;
if ($user === null || $valid === false) {
$this->cycleCheckpoints('fail', $user, false);
return false;
}
}
if (!$this->cycleCheckpoints('login', $user)) {
return false;
}
if ($login === true) {
$method = $remember === true ? 'loginAndRemember' : 'login';
if (!($user = $this->{$method}($user))) {
return false;
}
}
$this->fireEvent('sentinel.authenticated', $user);
return $this->user = $user;
}