123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- <?php
-
- namespace Illuminate\Auth;
-
- use Illuminate\Support\Str;
- use Illuminate\Contracts\Auth\UserProvider;
- use Illuminate\Database\ConnectionInterface;
- use Illuminate\Contracts\Hashing\Hasher as HasherContract;
- use Illuminate\Contracts\Auth\Authenticatable as UserContract;
-
- class DatabaseUserProvider implements UserProvider
- {
- /**
- * The active database connection.
- *
- * @var \Illuminate\Database\ConnectionInterface
- */
- protected $conn;
-
- /**
- * The hasher implementation.
- *
- * @var \Illuminate\Contracts\Hashing\Hasher
- */
- protected $hasher;
-
- /**
- * The table containing the users.
- *
- * @var string
- */
- protected $table;
-
- /**
- * Create a new database user provider.
- *
- * @param \Illuminate\Database\ConnectionInterface $conn
- * @param \Illuminate\Contracts\Hashing\Hasher $hasher
- * @param string $table
- * @return void
- */
- public function __construct(ConnectionInterface $conn, HasherContract $hasher, $table)
- {
- $this->conn = $conn;
- $this->table = $table;
- $this->hasher = $hasher;
- }
-
- /**
- * Retrieve a user by their unique identifier.
- *
- * @param mixed $identifier
- * @return \Illuminate\Contracts\Auth\Authenticatable|null
- */
- public function retrieveById($identifier)
- {
- $user = $this->conn->table($this->table)->find($identifier);
-
- return $this->getGenericUser($user);
- }
-
- /**
- * 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)
- {
- $user = $this->getGenericUser(
- $this->conn->table($this->table)->find($identifier)
- );
-
- return $user && $user->getRememberToken() && hash_equals($user->getRememberToken(), $token)
- ? $user : null;
- }
-
- /**
- * Update the "remember me" token for the given user in storage.
- *
- * @param \Illuminate\Contracts\Auth\Authenticatable $user
- * @param string $token
- * @return void
- */
- public function updateRememberToken(UserContract $user, $token)
- {
- $this->conn->table($this->table)
- ->where($user->getAuthIdentifierName(), $user->getAuthIdentifier())
- ->update([$user->getRememberTokenName() => $token]);
- }
-
- /**
- * 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 &&
- array_key_exists('password', $credentials))) {
- 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
- // generic "user" object that will be utilized by the Guard instances.
- $query = $this->conn->table($this->table);
-
- foreach ($credentials as $key => $value) {
- if (! Str::contains($key, 'password')) {
- $query->where($key, $value);
- }
- }
-
- // Now we are ready to execute the query to see if we have an user matching
- // the given credentials. If not, we will just return nulls and indicate
- // that there are no matching users for these given credential arrays.
- $user = $query->first();
-
- return $this->getGenericUser($user);
- }
-
- /**
- * Get the generic user.
- *
- * @param mixed $user
- * @return \Illuminate\Auth\GenericUser|null
- */
- protected function getGenericUser($user)
- {
- if (! is_null($user)) {
- return new GenericUser((array) $user);
- }
- }
-
- /**
- * Validate a user against the given credentials.
- *
- * @param \Illuminate\Contracts\Auth\Authenticatable $user
- * @param array $credentials
- * @return bool
- */
- public function validateCredentials(UserContract $user, array $credentials)
- {
- return $this->hasher->check(
- $credentials['password'], $user->getAuthPassword()
- );
- }
- }
|