From 404cc13cfc71788c4f0c9787922bc0a49f58ff2a Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Tue, 18 Feb 2025 14:32:37 -0600 Subject: [PATCH 1/6] workos variant --- .env.example | 4 + .../Auth/AuthenticatedSessionController.php | 51 ----- .../Auth/ConfirmablePasswordController.php | 41 ----- ...mailVerificationNotificationController.php | 24 --- .../EmailVerificationPromptController.php | 22 --- .../Auth/NewPasswordController.php | 69 ------- .../Auth/PasswordResetLinkController.php | 41 ----- .../Auth/RegisteredUserController.php | 51 ----- .../Auth/VerifyEmailController.php | 29 --- .../Settings/PasswordController.php | 43 ----- .../Settings/ProfileController.php | 41 ++--- app/Http/Requests/Auth/LoginRequest.php | 85 --------- .../Settings/ProfileUpdateRequest.php | 30 --- app/Models/User.php | 5 +- composer.json | 1 + composer.lock | 174 +++++++++++++++++- config/services.php | 6 + database/factories/UserFactory.php | 9 +- .../0001_01_01_000000_create_users_table.php | 10 +- phpstan.neon | 10 - resources/js/components/DeleteUser.vue | 20 +- resources/js/layouts/AuthLayout.vue | 14 -- resources/js/layouts/auth/AuthCardLayout.vue | 31 ---- .../js/layouts/auth/AuthSimpleLayout.vue | 29 --- resources/js/layouts/auth/AuthSplitLayout.vue | 35 ---- resources/js/layouts/settings/Layout.vue | 4 - resources/js/pages/Welcome.vue | 12 +- resources/js/pages/auth/ConfirmPassword.vue | 51 ----- resources/js/pages/auth/ForgotPassword.vue | 54 ------ resources/js/pages/auth/Login.vue | 76 -------- resources/js/pages/auth/Register.vue | 74 -------- resources/js/pages/auth/ResetPassword.vue | 79 -------- resources/js/pages/auth/VerifyEmail.vue | 50 ----- resources/js/pages/settings/Password.vue | 124 ------------- resources/js/pages/settings/Profile.vue | 21 +-- routes/auth.php | 62 ++----- routes/settings.php | 22 +++ routes/web.php | 44 ++--- tests/Feature/Auth/AuthenticationTest.php | 54 ------ tests/Feature/Auth/EmailVerificationTest.php | 58 ------ .../Feature/Auth/PasswordConfirmationTest.php | 44 ----- tests/Feature/Auth/PasswordResetTest.php | 73 -------- tests/Feature/Auth/RegistrationTest.php | 31 ---- tests/Feature/DashboardTest.php | 9 +- tests/Feature/ExampleTest.php | 18 -- tests/Feature/Settings/PasswordUpdateTest.php | 51 ----- tests/Feature/Settings/ProfileUpdateTest.php | 43 +---- 47 files changed, 264 insertions(+), 1665 deletions(-) delete mode 100644 app/Http/Controllers/Auth/AuthenticatedSessionController.php delete mode 100644 app/Http/Controllers/Auth/ConfirmablePasswordController.php delete mode 100644 app/Http/Controllers/Auth/EmailVerificationNotificationController.php delete mode 100644 app/Http/Controllers/Auth/EmailVerificationPromptController.php delete mode 100644 app/Http/Controllers/Auth/NewPasswordController.php delete mode 100644 app/Http/Controllers/Auth/PasswordResetLinkController.php delete mode 100644 app/Http/Controllers/Auth/RegisteredUserController.php delete mode 100644 app/Http/Controllers/Auth/VerifyEmailController.php delete mode 100644 app/Http/Controllers/Settings/PasswordController.php delete mode 100644 app/Http/Requests/Auth/LoginRequest.php delete mode 100644 app/Http/Requests/Settings/ProfileUpdateRequest.php delete mode 100644 phpstan.neon delete mode 100644 resources/js/layouts/AuthLayout.vue delete mode 100644 resources/js/layouts/auth/AuthCardLayout.vue delete mode 100644 resources/js/layouts/auth/AuthSimpleLayout.vue delete mode 100644 resources/js/layouts/auth/AuthSplitLayout.vue delete mode 100644 resources/js/pages/auth/ConfirmPassword.vue delete mode 100644 resources/js/pages/auth/ForgotPassword.vue delete mode 100644 resources/js/pages/auth/Login.vue delete mode 100644 resources/js/pages/auth/Register.vue delete mode 100644 resources/js/pages/auth/ResetPassword.vue delete mode 100644 resources/js/pages/auth/VerifyEmail.vue delete mode 100644 resources/js/pages/settings/Password.vue create mode 100644 routes/settings.php delete mode 100644 tests/Feature/Auth/AuthenticationTest.php delete mode 100644 tests/Feature/Auth/EmailVerificationTest.php delete mode 100644 tests/Feature/Auth/PasswordConfirmationTest.php delete mode 100644 tests/Feature/Auth/PasswordResetTest.php delete mode 100644 tests/Feature/Auth/RegistrationTest.php delete mode 100644 tests/Feature/ExampleTest.php delete mode 100644 tests/Feature/Settings/PasswordUpdateTest.php diff --git a/.env.example b/.env.example index a1b3de4c..fe29e597 100644 --- a/.env.example +++ b/.env.example @@ -57,6 +57,10 @@ MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" +WORKOS_CLIENT_ID= +WORKOS_API_KEY= +WORKOS_REDIRECT_URL="${APP_URL}/authenticate" + AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php deleted file mode 100644 index dbb93653..00000000 --- a/app/Http/Controllers/Auth/AuthenticatedSessionController.php +++ /dev/null @@ -1,51 +0,0 @@ - Route::has('password.request'), - 'status' => $request->session()->get('status'), - ]); - } - - /** - * Handle an incoming authentication request. - */ - public function store(LoginRequest $request): RedirectResponse - { - $request->authenticate(); - - $request->session()->regenerate(); - - return redirect()->intended(route('dashboard', absolute: false)); - } - - /** - * Destroy an authenticated session. - */ - public function destroy(Request $request): RedirectResponse - { - Auth::guard('web')->logout(); - - $request->session()->invalidate(); - $request->session()->regenerateToken(); - - return redirect('/'); - } -} diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php deleted file mode 100644 index fb7d8e0d..00000000 --- a/app/Http/Controllers/Auth/ConfirmablePasswordController.php +++ /dev/null @@ -1,41 +0,0 @@ -validate([ - 'email' => $request->user()->email, - 'password' => $request->password, - ])) { - throw ValidationException::withMessages([ - 'password' => __('auth.password'), - ]); - } - - $request->session()->put('auth.password_confirmed_at', time()); - - return redirect()->intended(route('dashboard', absolute: false)); - } -} diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php deleted file mode 100644 index f64fa9ba..00000000 --- a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php +++ /dev/null @@ -1,24 +0,0 @@ -user()->hasVerifiedEmail()) { - return redirect()->intended(route('dashboard', absolute: false)); - } - - $request->user()->sendEmailVerificationNotification(); - - return back()->with('status', 'verification-link-sent'); - } -} diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php deleted file mode 100644 index bf57a208..00000000 --- a/app/Http/Controllers/Auth/EmailVerificationPromptController.php +++ /dev/null @@ -1,22 +0,0 @@ -user()->hasVerifiedEmail() - ? redirect()->intended(route('dashboard', absolute: false)) - : Inertia::render('auth/VerifyEmail', ['status' => $request->session()->get('status')]); - } -} diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php deleted file mode 100644 index 56ae905a..00000000 --- a/app/Http/Controllers/Auth/NewPasswordController.php +++ /dev/null @@ -1,69 +0,0 @@ - $request->email, - 'token' => $request->route('token'), - ]); - } - - /** - * Handle an incoming new password request. - * - * @throws \Illuminate\Validation\ValidationException - */ - public function store(Request $request): RedirectResponse - { - $request->validate([ - 'token' => 'required', - 'email' => 'required|email', - 'password' => ['required', 'confirmed', Rules\Password::defaults()], - ]); - - // Here we will attempt to reset the user's password. If it is successful we - // will update the password on an actual user model and persist it to the - // database. Otherwise we will parse the error and return the response. - $status = Password::reset( - $request->only('email', 'password', 'password_confirmation', 'token'), - function ($user) use ($request) { - $user->forceFill([ - 'password' => Hash::make($request->password), - 'remember_token' => Str::random(60), - ])->save(); - - event(new PasswordReset($user)); - } - ); - - // If the password was successfully reset, we will redirect the user back to - // the application's home authenticated view. If there is an error we can - // redirect them back to where they came from with their error message. - if ($status == Password::PasswordReset) { - return to_route('login')->with('status', __($status)); - } - - throw ValidationException::withMessages([ - 'email' => [__($status)], - ]); - } -} diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php deleted file mode 100644 index 33a1eb18..00000000 --- a/app/Http/Controllers/Auth/PasswordResetLinkController.php +++ /dev/null @@ -1,41 +0,0 @@ - $request->session()->get('status'), - ]); - } - - /** - * Handle an incoming password reset link request. - * - * @throws \Illuminate\Validation\ValidationException - */ - public function store(Request $request): RedirectResponse - { - $request->validate([ - 'email' => 'required|email', - ]); - - Password::sendResetLink( - $request->only('email') - ); - - return back()->with('status', __('If an account exists with that email, you’ll receive a reset link shortly.')); - } -} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php deleted file mode 100644 index c7138cac..00000000 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ /dev/null @@ -1,51 +0,0 @@ -validate([ - 'name' => 'required|string|max:255', - 'email' => 'required|string|lowercase|email|max:255|unique:'.User::class, - 'password' => ['required', 'confirmed', Rules\Password::defaults()], - ]); - - $user = User::create([ - 'name' => $request->name, - 'email' => $request->email, - 'password' => Hash::make($request->password), - ]); - - event(new Registered($user)); - - Auth::login($user); - - return to_route('dashboard'); - } -} diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php deleted file mode 100644 index 2477faa5..00000000 --- a/app/Http/Controllers/Auth/VerifyEmailController.php +++ /dev/null @@ -1,29 +0,0 @@ -user()->hasVerifiedEmail()) { - return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); - } - - if ($request->user()->markEmailAsVerified()) { - /** @var \Illuminate\Contracts\Auth\MustVerifyEmail $user */ - $user = $request->user(); - event(new Verified($user)); - } - - return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); - } -} diff --git a/app/Http/Controllers/Settings/PasswordController.php b/app/Http/Controllers/Settings/PasswordController.php deleted file mode 100644 index 643b66aa..00000000 --- a/app/Http/Controllers/Settings/PasswordController.php +++ /dev/null @@ -1,43 +0,0 @@ - $request->user() instanceof MustVerifyEmail, - 'status' => $request->session()->get('status'), - ]); - } - - /** - * Update the user's password. - */ - public function update(Request $request): RedirectResponse - { - $validated = $request->validate([ - 'current_password' => ['required', 'current_password'], - 'password' => ['required', Password::defaults(), 'confirmed'], - ]); - - $request->user()->update([ - 'password' => Hash::make($validated['password']), - ]); - - return back(); - } -} diff --git a/app/Http/Controllers/Settings/ProfileController.php b/app/Http/Controllers/Settings/ProfileController.php index 10f3d224..6ed259c2 100644 --- a/app/Http/Controllers/Settings/ProfileController.php +++ b/app/Http/Controllers/Settings/ProfileController.php @@ -3,13 +3,12 @@ namespace App\Http\Controllers\Settings; use App\Http\Controllers\Controller; -use App\Http\Requests\Settings\ProfileUpdateRequest; -use Illuminate\Contracts\Auth\MustVerifyEmail; +use App\Models\User; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; use Inertia\Inertia; use Inertia\Response; +use Laravel\WorkOS\Http\Requests\AuthKitAccountDeletionRequest; class ProfileController extends Controller { @@ -19,45 +18,31 @@ class ProfileController extends Controller public function edit(Request $request): Response { return Inertia::render('settings/Profile', [ - 'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail, 'status' => $request->session()->get('status'), ]); } /** - * Update the user's profile information. + * Update the user's profile settings. */ - public function update(ProfileUpdateRequest $request): RedirectResponse + public function update(Request $request): RedirectResponse { - $request->user()->fill($request->validated()); - - if ($request->user()->isDirty('email')) { - $request->user()->email_verified_at = null; - } + $request->validate([ + 'name' => ['required', 'string', 'max:255'], + ]); - $request->user()->save(); + $request->user()->update(['name' => $request->name]); return to_route('profile.edit'); } /** - * Delete the user's profile. + * Delete the user's account. */ - public function destroy(Request $request): RedirectResponse + public function destroy(AuthKitAccountDeletionRequest $request): RedirectResponse { - $request->validate([ - 'password' => ['required', 'current_password'], - ]); - - $user = $request->user(); - - Auth::logout(); - - $user->delete(); - - $request->session()->invalidate(); - $request->session()->regenerateToken(); - - return redirect('/'); + return $request->delete( + using: fn (User $user) => $user->delete() + ); } } diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php deleted file mode 100644 index 25746424..00000000 --- a/app/Http/Requests/Auth/LoginRequest.php +++ /dev/null @@ -1,85 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'email' => ['required', 'string', 'email'], - 'password' => ['required', 'string'], - ]; - } - - /** - * Attempt to authenticate the request's credentials. - * - * @throws \Illuminate\Validation\ValidationException - */ - public function authenticate(): void - { - $this->ensureIsNotRateLimited(); - - if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { - RateLimiter::hit($this->throttleKey()); - - throw ValidationException::withMessages([ - 'email' => trans('auth.failed'), - ]); - } - - RateLimiter::clear($this->throttleKey()); - } - - /** - * Ensure the login request is not rate limited. - * - * @throws \Illuminate\Validation\ValidationException - */ - public function ensureIsNotRateLimited(): void - { - if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { - return; - } - - event(new Lockout($this)); - - $seconds = RateLimiter::availableIn($this->throttleKey()); - - throw ValidationException::withMessages([ - 'email' => trans('auth.throttle', [ - 'seconds' => $seconds, - 'minutes' => ceil($seconds / 60), - ]), - ]); - } - - /** - * Get the rate limiting throttle key for the request. - */ - public function throttleKey(): string - { - return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); - } -} diff --git a/app/Http/Requests/Settings/ProfileUpdateRequest.php b/app/Http/Requests/Settings/ProfileUpdateRequest.php deleted file mode 100644 index c294aab2..00000000 --- a/app/Http/Requests/Settings/ProfileUpdateRequest.php +++ /dev/null @@ -1,30 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'name' => ['required', 'string', 'max:255'], - 'email' => [ - 'required', - 'string', - 'lowercase', - 'email', - 'max:255', - Rule::unique(User::class)->ignore($this->user()->id), - ], - ]; - } -} diff --git a/app/Models/User.php b/app/Models/User.php index 749c7b77..bff72d3d 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -20,7 +20,8 @@ class User extends Authenticatable protected $fillable = [ 'name', 'email', - 'password', + 'workos_id', + 'avatar', ]; /** @@ -29,7 +30,7 @@ class User extends Authenticatable * @var list */ protected $hidden = [ - 'password', + 'workos_id', 'remember_token', ]; diff --git a/composer.json b/composer.json index e1ff26a1..465ace75 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "inertiajs/inertia-laravel": "^2.0", "laravel/framework": "^12.0", "laravel/tinker": "^2.10.1", + "laravel/workos": "^0.1.0", "tightenco/ziggy": "^2.4" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 417032dc..0c7ff21d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0a1dc7716e973633f41507aed63cd71d", + "content-hash": "4227052fbe0f82cd88906bba9d20badf", "packages": [ { "name": "brick/math", @@ -510,6 +510,69 @@ ], "time": "2024-12-27T00:36:43+00:00" }, + { + "name": "firebase/php-jwt", + "version": "v6.11.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/8f718f4dfc9c5d5f0c994cdfd103921b43592712", + "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.4", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psr/cache": "^2.0||^3.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-sodium": "Support EdDSA (Ed25519) signatures", + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v6.11.0" + }, + "time": "2025-01-23T05:11:06+00:00" + }, { "name": "fruitcake/php-cors", "version": "v1.3.0", @@ -1529,6 +1592,69 @@ }, "time": "2025-01-27T14:24:01+00:00" }, + { + "name": "laravel/workos", + "version": "v0.1.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/workos.git", + "reference": "e326ab8990ba5f7b31476d208e77e2c1580bfad8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/workos/zipball/e326ab8990ba5f7b31476d208e77e2c1580bfad8", + "reference": "e326ab8990ba5f7b31476d208e77e2c1580bfad8", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "^6.11", + "illuminate/contracts": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", + "php": "^8.2", + "workos/workos-php": "^4.18" + }, + "require-dev": { + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.0|^10.0", + "pestphp/pest": "^3.0", + "phpstan/phpstan": "^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [] + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\WorkOS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Utilities for integrating the Laravel starter kits with WorkOS.", + "homepage": "https://github.com/laravel/workos", + "keywords": [ + "laravel", + "workos" + ], + "support": { + "issues": "https://github.com/laravel/workos/issues", + "source": "https://github.com/laravel/workos" + }, + "time": "2025-02-18T20:17:33+00:00" + }, { "name": "league/commonmark", "version": "2.6.1", @@ -5941,6 +6067,52 @@ "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "workos/workos-php", + "version": "v4.18.0", + "source": { + "type": "git", + "url": "https://github.com/workos/workos-php.git", + "reference": "d99809c1382b9e2d0bbfcf37b6f6d7fd6630395d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/workos/workos-php/zipball/d99809c1382b9e2d0bbfcf37b6f6d7fd6630395d", + "reference": "d99809c1382b9e2d0bbfcf37b6f6d7fd6630395d", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=7.3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.15|^3.6", + "phpunit/phpunit": "^10" + }, + "type": "library", + "autoload": { + "psr-4": { + "WorkOS\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "WorkOS", + "email": "eng@workos.com" + } + ], + "description": "WorkOS PHP Library", + "homepage": "https://workos.com", + "support": { + "issues": "https://github.com/workos/workos-php/issues", + "source": "https://github.com/workos/workos-php/tree/v4.18.0" + }, + "time": "2025-01-14T19:15:43+00:00" } ], "packages-dev": [ diff --git a/config/services.php b/config/services.php index 27a36175..cdb08d0a 100644 --- a/config/services.php +++ b/config/services.php @@ -35,4 +35,10 @@ ], ], + 'workos' => [ + 'client_id' => env('WORKOS_CLIENT_ID'), + 'secret' => env('WORKOS_API_KEY'), + 'redirect_url' => env('WORKOS_REDIRECT_URL'), + ], + ]; diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 584104c9..bd8b2c3d 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -3,7 +3,6 @@ namespace Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; -use Illuminate\Support\Facades\Hash; use Illuminate\Support\Str; /** @@ -11,11 +10,6 @@ */ class UserFactory extends Factory { - /** - * The current password being used by the factory. - */ - protected static ?string $password; - /** * Define the model's default state. * @@ -27,8 +21,9 @@ public function definition(): array 'name' => fake()->name(), 'email' => fake()->unique()->safeEmail(), 'email_verified_at' => now(), - 'password' => static::$password ??= Hash::make('password'), + 'workos_id' => 'fake-'.Str::random(10), 'remember_token' => Str::random(10), + 'avatar' => '', ]; } diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php index 05fb5d9e..cd6072cb 100644 --- a/database/migrations/0001_01_01_000000_create_users_table.php +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -16,17 +16,12 @@ public function up(): void $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); - $table->string('password'); + $table->string('workos_id')->unique(); $table->rememberToken(); + $table->text('avatar'); $table->timestamps(); }); - Schema::create('password_reset_tokens', function (Blueprint $table) { - $table->string('email')->primary(); - $table->string('token'); - $table->timestamp('created_at')->nullable(); - }); - Schema::create('sessions', function (Blueprint $table) { $table->string('id')->primary(); $table->foreignId('user_id')->nullable()->index(); @@ -43,7 +38,6 @@ public function up(): void public function down(): void { Schema::dropIfExists('users'); - Schema::dropIfExists('password_reset_tokens'); Schema::dropIfExists('sessions'); } }; diff --git a/phpstan.neon b/phpstan.neon deleted file mode 100644 index ef26e89f..00000000 --- a/phpstan.neon +++ /dev/null @@ -1,10 +0,0 @@ -includes: - - vendor/larastan/larastan/extension.neon - -parameters: - - paths: - - app/ - - # Level 9 is the highest level - level: 5 \ No newline at end of file diff --git a/resources/js/components/DeleteUser.vue b/resources/js/components/DeleteUser.vue index 796fac77..54f9a922 100644 --- a/resources/js/components/DeleteUser.vue +++ b/resources/js/components/DeleteUser.vue @@ -2,7 +2,6 @@ import { useForm } from '@inertiajs/vue3'; import { ref } from 'vue'; -// Components import HeadingSmall from '@/components/HeadingSmall.vue'; import InputError from '@/components/InputError.vue'; import { Button } from '@/components/ui/button'; @@ -19,11 +18,7 @@ import { import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; -const passwordInput = ref(null); - -const form = useForm({ - password: '', -}); +const form = useForm({}); const deleteUser = (e: Event) => { e.preventDefault(); @@ -31,8 +26,7 @@ const deleteUser = (e: Event) => { form.delete(route('profile.destroy'), { preserveScroll: true, onSuccess: () => closeModal(), - onError: () => passwordInput.value?.focus(), - onFinish: () => form.reset(), + onFinish: () => form.reset() }); }; @@ -55,17 +49,11 @@ const closeModal = () => { Are you sure you want to delete your account? - Once your account is deleted, all of its resources and data will also be permanently deleted. Please enter your - password to confirm you would like to permanently delete your account. + Once your account is deleted, all of its resources and data will also be permanently deleted. Please confirm + you would like to permanently delete your account. -
- - - -
- diff --git a/resources/js/layouts/AuthLayout.vue b/resources/js/layouts/AuthLayout.vue deleted file mode 100644 index 4b094551..00000000 --- a/resources/js/layouts/AuthLayout.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/resources/js/layouts/auth/AuthCardLayout.vue b/resources/js/layouts/auth/AuthCardLayout.vue deleted file mode 100644 index b36ac8d4..00000000 --- a/resources/js/layouts/auth/AuthCardLayout.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/resources/js/layouts/auth/AuthSimpleLayout.vue b/resources/js/layouts/auth/AuthSimpleLayout.vue deleted file mode 100644 index 3fe841b3..00000000 --- a/resources/js/layouts/auth/AuthSimpleLayout.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/resources/js/layouts/auth/AuthSplitLayout.vue b/resources/js/layouts/auth/AuthSplitLayout.vue deleted file mode 100644 index 73da5956..00000000 --- a/resources/js/layouts/auth/AuthSplitLayout.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/resources/js/layouts/settings/Layout.vue b/resources/js/layouts/settings/Layout.vue index b82ba372..34fde1b7 100644 --- a/resources/js/layouts/settings/Layout.vue +++ b/resources/js/layouts/settings/Layout.vue @@ -10,10 +10,6 @@ const sidebarNavItems: NavItem[] = [ title: 'Profile', href: '/settings/profile', }, - { - title: 'Password', - href: '/settings/password', - }, { title: 'Appearance', href: '/settings/appearance', diff --git a/resources/js/pages/Welcome.vue b/resources/js/pages/Welcome.vue index 1d9fac1b..8f21b3e0 100644 --- a/resources/js/pages/Welcome.vue +++ b/resources/js/pages/Welcome.vue @@ -2,8 +2,6 @@ import { Head, Link } from '@inertiajs/vue3'; defineProps<{ - canLogin?: boolean; - canRegister?: boolean; laravelVersion: string; phpVersion: string; }>(); @@ -39,7 +37,7 @@ function handleImageError() { /> -