AspireCloud/app/Actions/Fortify/UpdateUserProfileInformation.php
Enrique Chavez 8dca069dec
User Management and API Keys (#84)
* feat: Changes required on existing files to setup Jetstream

* feat: add the Inertia Home and Dashboard

* feat: Add all required files and migrations to setup Jetstream

* feat: Add the Sanctum middleware to the API endpoints

- Added Sanctum to the API endpoints to requiere an API Key
- Added a setting to control if the app should use authenticated API or not (see .env.example)
- Fix redirection on API routes to the login page when a request was unauthenticated

* feat: Users Management and Authication API Keys

- Refactor existing tests to make authenticated request is enable
- Hide the permissions setting on the UI, for now we only have a read-only API
- Add tests to test authenticated and unauthenticated calls
2024-11-01 18:30:03 -06:00

56 lines
1.7 KiB
PHP

<?php
namespace App\Actions\Fortify;
use App\Models\User;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Laravel\Fortify\Contracts\UpdatesUserProfileInformation;
class UpdateUserProfileInformation implements UpdatesUserProfileInformation
{
/**
* Validate and update the given user's profile information.
*
* @param array<string, mixed> $input
*/
public function update(User $user, array $input): void
{
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)],
'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:1024'],
])->validateWithBag('updateProfileInformation');
if (isset($input['photo'])) {
$user->updateProfilePhoto($input['photo']);
}
if ($input['email'] !== $user->email
&& $user instanceof MustVerifyEmail) {
$this->updateVerifiedUser($user, $input);
} else {
$user->forceFill([
'name' => $input['name'],
'email' => $input['email'],
])->save();
}
}
/**
* Update the given verified user's profile information.
*
* @param array<string, string> $input
*/
protected function updateVerifiedUser(User $user, array $input): void
{
$user->forceFill([
'name' => $input['name'],
'email' => $input['email'],
'email_verified_at' => null,
])->save();
$user->sendEmailVerificationNotification();
}
}