src/Laravel/Auth/AuthUserProvider.php
<?php
namespace Corcel\Laravel\Auth;
use Corcel\Services\PasswordService;
use Corcel\Model\User;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Support\Arr;
/**
* Class AuthUserProvider
*
* @package Corcel\Laravel\Auth
* @author Mickael Burguet <www.rundef.com>
* @author Junior Grossi <juniorgro@gmail.com>
*/
class AuthUserProvider implements UserProvider
{
/**
* @var array
*/
protected $config = [];
/**
* @param array $config
*/
public function __construct(array $config = [])
{
$this->config = $config;
}
/**
* Retrieve a user by their unique identifier.
*
* @param mixed $identifier
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveById($identifier)
{
return $this->createModel()
->newQuery()
->where('ID', $identifier)
->first();
}
/**
* Retrieve a user by their unique identifier and "remember me" token.
*
* @param mixed $identifier
* @param string $token
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByToken($identifier, $token)
{
return $this->createModel()
->newQuery()
->where('ID', $identifier)
->hasMeta('remember_token', $token)
->first();
}
/**
* Update the "remember me" token for the given user in storage.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param string $token
*/
public function updateRememberToken(Authenticatable $user, $token)
{
$user->setRememberToken($token);
$user->save();
}
/**
* Retrieve a user by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByCredentials(array $credentials)
{
$query = $this->createModel()->newQuery();
if ($username = Arr::get($credentials, 'username')) {
return $query->where('user_login', $username)
->first();
}
if ($email = Arr::get($credentials, 'email')) {
return $query->where('user_email', $email)
->first();
}
return null;
}
/**
* Validate a user against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param array $credentials
* @return bool
*/
public function validateCredentials(Authenticatable $user, array $credentials): bool
{
if (!isset($credentials['password'])) {
return false;
}
return (new PasswordService())
->check($credentials['password'], $user->user_pass);
}
/**
* Create a new instance of the model.
*
* @return \Illuminate\Database\Eloquent\Model
*/
protected function createModel()
{
$model = Arr::get($this->config, 'model');
return $model ? new $model : new User;
}
}