You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.6 KiB
PHP

<?php
namespace App\Providers;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Support\Str;
use App\Casts\EncryptFixed;
class CryptUserProvider extends EloquentUserProvider
{
/**
* Retrieve a user by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByCredentials(array $credentials)
{
if (empty($credentials) || (count($credentials) === 1 && Str::contains($this->firstCredentialKey($credentials), 'password'))) {
return;
}
// First we will add each credential element to the query as a where clause.
// Then we can execute the query and, if we found a user, return it in a
// Eloquent Front "model" that will be utilized by the Guard instances.
$query = $this->newModelQuery();
$userModel = $this->createModel();
foreach ($credentials as $key => $value) {
if (Str::contains($key, 'password')) {
continue;
}
logger($key . " : " . $value);
if (Str::contains($key, ['email','phone','name'])) {
$query->whereCrypt($key, $value);
} else if ($value instanceof EncryptFixed) {
$query->whereCrypt($key, $value);
} else if (is_array($value) || $value instanceof Arrayable) {
$query->whereIn($key, $value);
} else {
$query->where($key, $value);
}
}
return $query->first();
}
}