From 6143241fa44fdb5a80bd4ed22593159bd2039fdf Mon Sep 17 00:00:00 2001 From: tobytwigger Date: Wed, 12 Feb 2020 11:23:21 +0000 Subject: [PATCH] v1.0.3 (#5) * Update dependencies * Create jobs table * Update SDK dependency * Updates to auth * Fix auth * Fix authentication namespace bug * Update docs --- CHANGELOG.md | 11 +- Dockerfile | 19 + .../Controllers/Auth/RegisterController.php | 5 +- app/Providers/AuthServiceProvider.php | 6 + app/Support/Authentication/UserProvider.php | 115 ++++++ config/auth.php | 8 +- docker-compose.yml | 10 + docs/AuthServiceProvider_8php_source.html | 8 +- docs/RegisterController_8php_source.html | 2 +- docs/UserProvider_8php.html | 93 +++++ docs/UserProvider_8php_source.html | 93 +++++ docs/annotated.html | 11 +- ...d_1_1Providers_1_1AuthServiceProvider.html | 4 +- ...uthentication_1_1UserProvider-members.html | 87 +++++ ...ort_1_1Authentication_1_1UserProvider.html | 342 ++++++++++++++++++ ...ntication_1_1UserProvider__coll__graph.map | 2 + ...ntication_1_1UserProvider__coll__graph.md5 | 1 + ...ntication_1_1UserProvider__coll__graph.png | Bin 0 -> 6819 bytes ...cation_1_1UserProvider__inherit__graph.map | 2 + ...cation_1_1UserProvider__inherit__graph.md5 | 1 + ...cation_1_1UserProvider__inherit__graph.png | Bin 0 -> 6819 bytes docs/classes.html | 19 +- .../dir_7b09fcb4dbd0cb5b1b403fdf6d02d6b8.html | 2 + docs/files.html | 11 +- docs/functions.html | 17 + docs/functions_func.html | 16 + docs/functions_vars.html | 5 +- docs/hierarchy.html | 38 +- docs/inherit_graph_0.md5 | 2 +- docs/inherit_graph_0.png | Bin 4701 -> 4205 bytes docs/inherit_graph_1.md5 | 2 +- docs/inherit_graph_1.png | Bin 4292 -> 3815 bytes docs/inherit_graph_10.map | 2 +- docs/inherit_graph_10.md5 | 2 +- docs/inherit_graph_10.png | Bin 4592 -> 5350 bytes docs/inherit_graph_11.map | 2 +- docs/inherit_graph_11.md5 | 2 +- docs/inherit_graph_11.png | Bin 5446 -> 4044 bytes docs/inherit_graph_12.map | 2 +- docs/inherit_graph_12.md5 | 2 +- docs/inherit_graph_12.png | Bin 5911 -> 5243 bytes docs/inherit_graph_13.map | 2 +- docs/inherit_graph_13.md5 | 2 +- docs/inherit_graph_13.png | Bin 4592 -> 5645 bytes docs/inherit_graph_2.md5 | 2 +- docs/inherit_graph_2.png | Bin 5631 -> 4532 bytes docs/inherit_graph_3.map | 6 +- docs/inherit_graph_3.md5 | 2 +- docs/inherit_graph_3.png | Bin 133925 -> 156717 bytes docs/inherit_graph_4.md5 | 2 +- docs/inherit_graph_4.png | Bin 4070 -> 3619 bytes docs/inherit_graph_6.md5 | 2 +- docs/inherit_graph_6.png | Bin 32960 -> 29915 bytes docs/inherit_graph_8.md5 | 2 +- docs/inherit_graph_8.png | Bin 25565 -> 23828 bytes docs/inherit_graph_9.md5 | 2 +- docs/inherit_graph_9.png | Bin 6316 -> 5659 bytes docs/inherits.html | 17 +- docs/menudata.js | 3 +- ...ayground_1_1Support_1_1Authentication.html | 2 + docs/search/all_0.js | 2 +- docs/search/all_1.js | 2 +- docs/search/all_12.js | 5 +- docs/search/all_13.js | 1 + docs/search/all_f.js | 3 + docs/search/classes_c.js | 4 +- docs/search/classes_d.js | 5 +- docs/search/files_c.js | 4 +- docs/search/files_d.js | 5 +- docs/search/functions_0.js | 2 +- docs/search/functions_8.js | 5 +- docs/search/functions_b.js | 3 +- docs/search/functions_c.js | 1 + docs/search/searchdata.js | 4 +- docs/search/variables_0.js | 2 +- docs/tabs.css | 2 +- 76 files changed, 943 insertions(+), 95 deletions(-) create mode 100644 Dockerfile create mode 100644 app/Support/Authentication/UserProvider.php create mode 100644 docker-compose.yml create mode 100644 docs/UserProvider_8php.html create mode 100644 docs/UserProvider_8php_source.html create mode 100644 docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider-members.html create mode 100644 docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider.html create mode 100644 docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.map create mode 100644 docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.md5 create mode 100644 docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.png create mode 100644 docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__inherit__graph.map create mode 100644 docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__inherit__graph.md5 create mode 100644 docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__inherit__graph.png diff --git a/CHANGELOG.md b/CHANGELOG.md index afa5619..9287162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.0.3] - (12/02/2020) + +### Changed +- Registration changes to match new SDK +- Set up User Provider +- Update dependencies + ## [1.0.2] - (05/02/2020) ### Changed @@ -24,6 +31,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Open and save module instances - Change settings, permissions and third party connections -[Unreleased]: https://github.com/bristol-su/playground/compare/v1.0.1...HEAD +[Unreleased]: https://github.com/bristol-su/playground/compare/v1.0.3...HEAD +[1.0.3]: https://github.com/bristol-su/playground/compare/v1.0.2...v1.0.3 +[1.0.2]: https://github.com/bristol-su/playground/compare/v1.0.1...v1.0.2 [1.0.1]: https://github.com/bristol-su/playground/compare/v1.0...v1.0.1 [1.0]: https://github.com/bristol-su/playground/releases/tag/v1.0 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d6e4b70 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +# Set the base image for subsequent instructions +FROM php:7.2 + +# Update packages +RUN apt-get update + +# Install PHP and composer dependencies +RUN apt-get install -qq git curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev + +# Clear out the local repository of retrieved package files +RUN apt-get clean + +# Install needed extensions +# Here you can install any other extension that you need during the test and deployment process +RUN docker-php-ext-install mcrypt pdo_mysql zip + +# Install Composer +RUN curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index d932b7d..6dc372a 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -54,7 +54,7 @@ protected function validator(array $data) return Validator::make($data, [ 'first_name' => ['required', 'string', 'max:255'], 'last_name' => ['required', 'string', 'max:255'], - 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:control_data_user'], 'password' => ['required', 'string', 'min:5', 'confirmed'], ]); } @@ -67,12 +67,13 @@ protected function validator(array $data) */ protected function create(array $data) { - $dataUser = app(DataUser::class)->create($data['first_name'], $data['last_name'], $data['email']); + $dataUser = app(DataUser::class)->create($data['first_name'], $data['last_name'], $data['email'], null, $data['first_name'] . ' ' . $data['last_name']); $controlUser = app(\BristolSU\ControlDB\Contracts\Repositories\User::class)->create($dataUser->id()); $databaseUser = app(UserRepository::class)->create([ 'control_id' => $controlUser->id() ]); + $databaseUser->email_verified_at = Carbon::now(); $databaseUser->password = Hash::make($data['password']); $databaseUser->save(); diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 7a7f48e..68bb3b4 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -2,7 +2,9 @@ namespace BristolSU\Playground\Providers; +use BristolSU\Playground\Support\Authentication\UserProvider; use BristolSU\Support\Authentication\Contracts\Authentication; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\ServiceProvider; /** @@ -21,5 +23,9 @@ class AuthServiceProvider extends ServiceProvider public function boot() { $this->app->bind(Authentication::class, \BristolSU\Playground\Support\Authentication\Authentication::class); + + Auth::provider('data-user-provider', function($app) { + return $app->make(UserProvider::class); + }); } } diff --git a/app/Support/Authentication/UserProvider.php b/app/Support/Authentication/UserProvider.php new file mode 100644 index 0000000..55be660 --- /dev/null +++ b/app/Support/Authentication/UserProvider.php @@ -0,0 +1,115 @@ +userRepository = $userRepository; + } + + /** + * Retrieve a user by their unique email. + * + * @param mixed $email + * @return User|null + */ + public function retrieveById($email) + { + try { + return $this->userRepository->getById($email); + } catch (ModelNotFoundException $e) {} + return null; + } + + /** + * Retrieve a user by their unique email and "remember me" token. + * + * @param mixed $email + * @param string $token + * @return \Illuminate\Contracts\Auth\Authenticatable|null + */ + public function retrieveByToken($email, $token) + { + try { + $user = $this->userRepository->getFromRememberToken($token); + if($user->id === $email) { + return $user; + } + } catch (ModelNotFoundException $e) {} + return null; + } + + /** + * Update the "remember me" token for the given user in storage. + * + * @param Authenticatable|User $user + * @param string $token + * @return User|Authenticatable|null + */ + public function updateRememberToken(Authenticatable $user, $token) + { + $this->userRepository->setRememberToken($user->id, $token); + } + + /** + * Retrieve a user by the given credentials. + * + * @param array $credentials + * @return \Illuminate\Contracts\Auth\Authenticatable|null + */ + public function retrieveByCredentials(array $credentials) + { + + try { + $dataUser = app(DataUser::class)->getWhere([ + 'email' => $credentials['email'] + ]); + } catch (ModelNotFoundException $e) { + return null; + } + + try { + $controlUser = app(\BristolSU\ControlDB\Contracts\Repositories\User::class)->getByDataProviderId($dataUser->id()); + } catch (ModelNotFoundException $e) { + return null; + } + + try { + $user = $this->userRepository->getFromControlId($controlUser->id()); + } catch (ModelNotFoundException $e) { + return null; + } + + return $user; + } + + /** + * Validate a user against the given credentials. + * + * @param \Illuminate\Contracts\Auth\Authenticatable|User $user + * @param array $credentials + * @return bool + */ + public function validateCredentials(Authenticatable $user, array $credentials) + { + if(app(Hasher::class)->check($credentials['password'], $user->password)) { + return true; + } + return false; + } +} diff --git a/config/auth.php b/config/auth.php index 9a4631a..43e04be 100644 --- a/config/auth.php +++ b/config/auth.php @@ -40,12 +40,12 @@ 'guards' => [ 'web' => [ 'driver' => 'session', - 'provider' => 'users', + 'provider' => 'data-users', ], 'api' => [ 'driver' => 'passport', - 'provider' => 'users', + 'provider' => 'data-users', ], 'activity-instance' => [ @@ -82,6 +82,10 @@ 'model' => ActivityInstance::class ], + 'data-users' => [ + 'driver' => 'data-user-provider', + 'model' => \BristolSU\Support\User\User::class, + ] // 'users' => [ // 'driver' => 'database', diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a2d68be --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +version: "3.4" +services: + app: + image: php:alpine + volumes: + - "./:/app" + working_dir: /app + command: "php artisan serve --host=0.0.0.0 --port=8000" + ports: + - 8888:8000 diff --git a/docs/AuthServiceProvider_8php_source.html b/docs/AuthServiceProvider_8php_source.html index 90915d6..761a4c0 100644 --- a/docs/AuthServiceProvider_8php_source.html +++ b/docs/AuthServiceProvider_8php_source.html @@ -66,10 +66,12 @@
AuthServiceProvider.php
-Go to the documentation of this file.
1 <?php
2 
4 
7 
11 class AuthServiceProvider extends ServiceProvider
12 {
13 
21  public function boot()
22  {
23  $this->app->bind(Authentication::class, \BristolSU\Playground\Support\Authentication\Authentication::class);
24  }
25 }
- +Go to the documentation of this file.
1 <?php
2 
4 
9 
13 class AuthServiceProvider extends ServiceProvider
14 {
15 
23  public function boot()
24  {
25  $this->app->bind(Authentication::class, \BristolSU\Playground\Support\Authentication\Authentication::class);
26 
27  Auth::provider('data-user-provider', function($app) {
28  return $app->make(UserProvider::class);
29  });
30  }
31 }
+ - + + +
diff --git a/docs/RegisterController_8php_source.html b/docs/RegisterController_8php_source.html index 1eb18c0..9cff9d9 100644 --- a/docs/RegisterController_8php_source.html +++ b/docs/RegisterController_8php_source.html @@ -66,7 +66,7 @@
RegisterController.php
-Go to the documentation of this file.
1 <?php
2 
4 
13 
15 {
16  /*
17  |--------------------------------------------------------------------------
18  | Register Controller
19  |--------------------------------------------------------------------------
20  |
21  | This controller handles the registration of new users as well as their
22  | validation and creation. By default this controller uses a trait to
23  | provide this functionality without requiring any additional code.
24  |
25  */
26 
27  use RegistersUsers;
28 
34  protected $redirectTo = '/';
35 
41  public function __construct()
42  {
43  $this->middleware('guest');
44  }
45 
52  protected function validator(array $data)
53  {
54  return Validator::make($data, [
55  'first_name' => ['required', 'string', 'max:255'],
56  'last_name' => ['required', 'string', 'max:255'],
57  'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
58  'password' => ['required', 'string', 'min:5', 'confirmed'],
59  ]);
60  }
61 
68  protected function create(array $data)
69  {
70  $dataUser = app(DataUser::class)->create($data['first_name'], $data['last_name'], $data['email']);
71  $controlUser = app(\BristolSU\ControlDB\Contracts\Repositories\User::class)->create($dataUser->id());
72 
73  $databaseUser = app(UserRepository::class)->create([
74  'control_id' => $controlUser->id()
75  ]);
76  $databaseUser->email_verified_at = Carbon::now();
77  $databaseUser->password = Hash::make($data['password']);
78  $databaseUser->save();
79  return $databaseUser;
80 
81  }
82 }
+Go to the documentation of this file.
1 <?php
2 
4 
13 
15 {
16  /*
17  |--------------------------------------------------------------------------
18  | Register Controller
19  |--------------------------------------------------------------------------
20  |
21  | This controller handles the registration of new users as well as their
22  | validation and creation. By default this controller uses a trait to
23  | provide this functionality without requiring any additional code.
24  |
25  */
26 
27  use RegistersUsers;
28 
34  protected $redirectTo = '/';
35 
41  public function __construct()
42  {
43  $this->middleware('guest');
44  }
45 
52  protected function validator(array $data)
53  {
54  return Validator::make($data, [
55  'first_name' => ['required', 'string', 'max:255'],
56  'last_name' => ['required', 'string', 'max:255'],
57  'email' => ['required', 'string', 'email', 'max:255', 'unique:control_data_user'],
58  'password' => ['required', 'string', 'min:5', 'confirmed'],
59  ]);
60  }
61 
68  protected function create(array $data)
69  {
70  $dataUser = app(DataUser::class)->create($data['first_name'], $data['last_name'], $data['email'], null, $data['first_name'] . ' ' . $data['last_name']);
71  $controlUser = app(\BristolSU\ControlDB\Contracts\Repositories\User::class)->create($dataUser->id());
72 
73  $databaseUser = app(UserRepository::class)->create([
74  'control_id' => $controlUser->id()
75  ]);
76 
77  $databaseUser->email_verified_at = Carbon::now();
78  $databaseUser->password = Hash::make($data['password']);
79  $databaseUser->save();
80  return $databaseUser;
81 
82  }
83 }
diff --git a/docs/UserProvider_8php.html b/docs/UserProvider_8php.html new file mode 100644 index 0000000..b59749c --- /dev/null +++ b/docs/UserProvider_8php.html @@ -0,0 +1,93 @@ + + + + + + + +Bristol SU Playground: app/Support/Authentication/UserProvider.php File Reference + + + + + + + + + +
+
+ + + + + + +
+
Bristol SU Playground +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
UserProvider.php File Reference
+
+ + + + + diff --git a/docs/UserProvider_8php_source.html b/docs/UserProvider_8php_source.html new file mode 100644 index 0000000..188ac4f --- /dev/null +++ b/docs/UserProvider_8php_source.html @@ -0,0 +1,93 @@ + + + + + + + +Bristol SU Playground: app/Support/Authentication/UserProvider.php Source File + + + + + + + + + +
+
+ + + + + + +
+
Bristol SU Playground +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
UserProvider.php
+
+
+Go to the documentation of this file.
1 <?php
2 
4 
11 
12 class UserProvider implements \Illuminate\Contracts\Auth\UserProvider
13 {
14 
18  private $userRepository;
19 
20  public function __construct(UserRepository $userRepository)
21  {
22  $this->userRepository = $userRepository;
23  }
24 
31  public function retrieveById($email)
32  {
33  try {
34  return $this->userRepository->getById($email);
35  } catch (ModelNotFoundException $e) {}
36  return null;
37  }
38 
46  public function retrieveByToken($email, $token)
47  {
48  try {
49  $user = $this->userRepository->getFromRememberToken($token);
50  if($user->id === $email) {
51  return $user;
52  }
53  } catch (ModelNotFoundException $e) {}
54  return null;
55  }
56 
64  public function updateRememberToken(Authenticatable $user, $token)
65  {
66  $this->userRepository->setRememberToken($user->id, $token);
67  }
68 
75  public function retrieveByCredentials(array $credentials)
76  {
77 
78  try {
79  $dataUser = app(DataUser::class)->getWhere([
80  'email' => $credentials['email']
81  ]);
82  } catch (ModelNotFoundException $e) {
83  return null;
84  }
85 
86  try {
87  $controlUser = app(\BristolSU\ControlDB\Contracts\Repositories\User::class)->getByDataProviderId($dataUser->id());
88  } catch (ModelNotFoundException $e) {
89  return null;
90  }
91 
92  try {
93  $user = $this->userRepository->getFromControlId($controlUser->id());
94  } catch (ModelNotFoundException $e) {
95  return null;
96  }
97 
98  return $user;
99  }
100 
108  public function validateCredentials(Authenticatable $user, array $credentials)
109  {
110  if(app(Hasher::class)->check($credentials['password'], $user->password)) {
111  return true;
112  }
113  return false;
114  }
115 }
+ +
validateCredentials(Authenticatable $user, array $credentials)
+ + + + + + + + + + + + + +
+ + + + diff --git a/docs/annotated.html b/docs/annotated.html index e618df9..16dc9d7 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -110,11 +110,12 @@  NSupport  NAuthentication  CAuthentication - NModule - CModuleInstanceFactory - NPermissions - CModulePermission - COverridePermissionTester + CUserProvider + NModule + CModuleInstanceFactory + NPermissions + CModulePermission + COverridePermissionTester
diff --git a/docs/classBristolSU_1_1Playground_1_1Providers_1_1AuthServiceProvider.html b/docs/classBristolSU_1_1Playground_1_1Providers_1_1AuthServiceProvider.html index 4330dd0..aee0d47 100644 --- a/docs/classBristolSU_1_1Playground_1_1Providers_1_1AuthServiceProvider.html +++ b/docs/classBristolSU_1_1Playground_1_1Providers_1_1AuthServiceProvider.html @@ -88,7 +88,7 @@

Detailed Description

Authentication Service Provider

-

Definition at line 11 of file AuthServiceProvider.php.

+

Definition at line 13 of file AuthServiceProvider.php.

Member Function Documentation

◆ boot()

@@ -110,7 +110,7 @@

Returns
void
-

Definition at line 21 of file AuthServiceProvider.php.

+

Definition at line 23 of file AuthServiceProvider.php.

diff --git a/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider-members.html b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider-members.html new file mode 100644 index 0000000..b9a81d7 --- /dev/null +++ b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider-members.html @@ -0,0 +1,87 @@ + + + + + + + +Bristol SU Playground: Member List + + + + + + + + + +
+
+ + + + + + +
+
Bristol SU Playground +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
BristolSU\Playground\Support\Authentication\UserProvider Member List
+
+
+ +

This is the complete list of members for BristolSU\Playground\Support\Authentication\UserProvider, including all inherited members.

+ + + + + + + + +
$userRepositoryBristolSU\Playground\Support\Authentication\UserProviderprivate
__construct(UserRepository $userRepository)BristolSU\Playground\Support\Authentication\UserProvider
retrieveByCredentials(array $credentials)BristolSU\Playground\Support\Authentication\UserProvider
retrieveById($email)BristolSU\Playground\Support\Authentication\UserProvider
retrieveByToken($email, $token)BristolSU\Playground\Support\Authentication\UserProvider
updateRememberToken(Authenticatable $user, $token)BristolSU\Playground\Support\Authentication\UserProvider
validateCredentials(Authenticatable $user, array $credentials)BristolSU\Playground\Support\Authentication\UserProvider
+ + + + diff --git a/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider.html b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider.html new file mode 100644 index 0000000..9bc524a --- /dev/null +++ b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider.html @@ -0,0 +1,342 @@ + + + + + + + +Bristol SU Playground: BristolSU\Playground\Support\Authentication\UserProvider Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Bristol SU Playground +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
BristolSU\Playground\Support\Authentication\UserProvider Class Reference
+
+
+
+Inheritance diagram for BristolSU\Playground\Support\Authentication\UserProvider:
+
+
Inheritance graph
+
[legend]
+
+Collaboration diagram for BristolSU\Playground\Support\Authentication\UserProvider:
+
+
Collaboration graph
+
[legend]
+ + + + + + + + + + + + + + +

+Public Member Functions

 __construct (UserRepository $userRepository)
 
 retrieveById ($email)
 
 retrieveByToken ($email, $token)
 
 updateRememberToken (Authenticatable $user, $token)
 
 retrieveByCredentials (array $credentials)
 
 validateCredentials (Authenticatable $user, array $credentials)
 
+ + + +

+Private Attributes

 $userRepository
 
+

Detailed Description

+
+

Definition at line 12 of file UserProvider.php.

+

Constructor & Destructor Documentation

+ +

◆ __construct()

+ +
+
+ + + + + + + + +
BristolSU\Playground\Support\Authentication\UserProvider::__construct (UserRepository $userRepository)
+
+
+

Member Function Documentation

+ +

◆ retrieveByCredentials()

+ +
+
+ + + + + + + + +
BristolSU\Playground\Support\Authentication\UserProvider::retrieveByCredentials (array $credentials)
+
+

Retrieve a user by the given credentials.

+
Parameters
+ + +
array$credentials
+
+
+
Returns
|null
+ +

Definition at line 75 of file UserProvider.php.

+ +
+
+ +

◆ retrieveById()

+ +
+
+ + + + + + + + +
BristolSU\Playground\Support\Authentication\UserProvider::retrieveById ( $email)
+
+

Retrieve a user by their unique email.

+
Parameters
+ + +
mixed$email
+
+
+
Returns
User|null
+ +

Definition at line 31 of file UserProvider.php.

+ +
+
+ +

◆ retrieveByToken()

+ +
+
+ + + + + + + + + + + + + + + + + + +
BristolSU\Playground\Support\Authentication\UserProvider::retrieveByToken ( $email,
 $token 
)
+
+

Retrieve a user by their unique email and "remember me" token.

+
Parameters
+ + + +
mixed$email
string$token
+
+
+
Returns
|null
+ +

Definition at line 46 of file UserProvider.php.

+ +
+
+ +

◆ updateRememberToken()

+ +
+
+ + + + + + + + + + + + + + + + + + +
BristolSU\Playground\Support\Authentication\UserProvider::updateRememberToken (Authenticatable $user,
 $token 
)
+
+

Update the "remember me" token for the given user in storage.

+
Parameters
+ + + +
Authenticatable | User$user
string$token
+
+
+
Returns
User|Authenticatable|null
+ +

Definition at line 64 of file UserProvider.php.

+ +
+
+ +

◆ validateCredentials()

+ +
+
+ + + + + + + + + + + + + + + + + + +
BristolSU\Playground\Support\Authentication\UserProvider::validateCredentials (Authenticatable $user,
array $credentials 
)
+
+

Validate a user against the given credentials.

+
Parameters
+ + + +
\Illuminate\Contracts\Auth\Authenticatable | User$user
array$credentials
+
+
+
Returns
bool
+ +

Definition at line 108 of file UserProvider.php.

+ +
+
+

Member Data Documentation

+ +

◆ $userRepository

+ +
+
+ + + + + +
+ + + + +
BristolSU\Playground\Support\Authentication\UserProvider::$userRepository
+
+private
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.map b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.map new file mode 100644 index 0000000..ce46615 --- /dev/null +++ b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.md5 b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.md5 new file mode 100644 index 0000000..26ab95e --- /dev/null +++ b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.md5 @@ -0,0 +1 @@ +29e34a80f0eac42fe181fc1a4b575917 \ No newline at end of file diff --git a/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.png b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..991c05645c102be8306bc219a3234db6ded59ca4 GIT binary patch literal 6819 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 + diff --git a/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__inherit__graph.md5 b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__inherit__graph.md5 new file mode 100644 index 0000000..bccf8fd --- /dev/null +++ b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__inherit__graph.md5 @@ -0,0 +1 @@ +858c37cedb03023f7b91a716ed44bb9f \ No newline at end of file diff --git a/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__inherit__graph.png b/docs/classBristolSU_1_1Playground_1_1Support_1_1Authentication_1_1UserProvider__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..991c05645c102be8306bc219a3234db6ded59ca4 GIT binary patch literal 6819 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 Index
-
a | c | e | f | h | k | l | m | o | r | s | t | v
+
a | c | e | f | h | k | l | m | o | r | s | t | u | v
+ - + + - + + +
  a  
  e  
@@ -76,24 +76,25 @@
TrustProxies (BristolSU\Playground\Http\Middleware)   
Authentication (BristolSU\Playground\Support\Authentication)   
  f  
  m  
-
  v  
+
  u  
AuthServiceProvider (BristolSU\Playground\Providers)   RedirectIfAuthenticated (BristolSU\Playground\Http\Middleware)   
  c  
-
ForgotPasswordController (BristolSU\Playground\Http\Controllers\Auth)   ModuleController (BristolSU\Playground\Http\Controllers\Api)   RegisterController (BristolSU\Playground\Http\Controllers\Auth)   VerificationController (BristolSU\Playground\Http\Controllers\Auth)   
ForgotPasswordController (BristolSU\Playground\Http\Controllers\Auth)   ModuleController (BristolSU\Playground\Http\Controllers\Api)   RegisterController (BristolSU\Playground\Http\Controllers\Auth)   UserProvider (BristolSU\Playground\Support\Authentication)   
  h  
-
ModuleInstanceFactory (BristolSU\Playground\Support\Module)   ResetPasswordController (BristolSU\Playground\Http\Controllers\Auth)   VerifyCsrfToken (BristolSU\Playground\Http\Middleware)   
CheckForMaintenanceMode (BristolSU\Playground\Http\Middleware)   ModuleInstancePermissionController (BristolSU\Playground\Http\Controllers\Api)   RouteServiceProvider (BristolSU\Playground\Providers)   ViewServiceProvider (BristolSU\Playground\Providers)   
ModuleInstanceFactory (BristolSU\Playground\Support\Module)   ResetPasswordController (BristolSU\Playground\Http\Controllers\Auth)   
  v  
+
CheckForMaintenanceMode (BristolSU\Playground\Http\Middleware)   ModuleInstancePermissionController (BristolSU\Playground\Http\Controllers\Api)   RouteServiceProvider (BristolSU\Playground\Providers)   
ClearDatabase (BristolSU\Playground\Console\Commands)   Handler (BristolSU\Playground\Exceptions)   ModuleInstanceServiceController (BristolSU\Playground\Http\Controllers\Api)   
  s  
-
ConfirmPasswordController (BristolSU\Playground\Http\Controllers\Auth)   HomeController (BristolSU\Playground\Http\Controllers)   ModuleInstanceSettingController (BristolSU\Playground\Http\Controllers\Api)   
VerificationController (BristolSU\Playground\Http\Controllers\Auth)   
ConfirmPasswordController (BristolSU\Playground\Http\Controllers\Auth)   HomeController (BristolSU\Playground\Http\Controllers)   ModuleInstanceSettingController (BristolSU\Playground\Http\Controllers\Api)   VerifyCsrfToken (BristolSU\Playground\Http\Middleware)   
ConnectionController (BristolSU\Playground\Http\Controllers\Api)   
  k  
-
ModuleModuleInstanceController (BristolSU\Playground\Http\Controllers\Api)   ServiceConnectionController (BristolSU\Playground\Http\Controllers\Api)   
ModuleModuleInstanceController (BristolSU\Playground\Http\Controllers\Api)   ServiceConnectionController (BristolSU\Playground\Http\Controllers\Api)   ViewServiceProvider (BristolSU\Playground\Providers)   
Controller (BristolSU\Playground\Http\Controllers)   ModulePermission (BristolSU\Playground\Support\Permissions)   ServiceConnectorController (BristolSU\Playground\Http\Controllers\Api)   
Kernel (BristolSU\Playground\Console)   
-
a | c | e | f | h | k | l | m | o | r | s | t | v
+
a | c | e | f | h | k | l | m | o | r | s | t | u | v