├── .chipperci.yml ├── .editorconfig ├── .env.example ├── .env.testing ├── .gitattributes ├── .gitignore ├── README.md ├── app ├── Actions │ └── Fortify │ │ ├── CreateNewUser.php │ │ ├── PasswordValidationRules.php │ │ ├── ResetUserPassword.php │ │ ├── UpdateUserPassword.php │ │ └── UpdateUserProfileInformation.php ├── Http │ ├── Controllers │ │ ├── Api │ │ │ └── V1 │ │ │ │ └── User │ │ │ │ └── MeController.php │ │ └── Controller.php │ └── Resources │ │ └── UserResource.php ├── Models │ └── User.php ├── Policies │ └── TeamPolicy.php └── Providers │ ├── AppServiceProvider.php │ └── FortifyServiceProvider.php ├── art ├── bmc_qr.jpg ├── screenshot-home.png ├── screenshot-login.png └── screenshot-settings.png ├── artisan ├── bin └── install.sh ├── bootstrap ├── app.php ├── cache │ └── .gitignore └── providers.php ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── cache.php ├── cors.php ├── database.php ├── filesystems.php ├── fortify.php ├── logging.php ├── mail.php ├── queue.php ├── sanctum.php ├── services.php └── session.php ├── database ├── .gitignore ├── factories │ ├── TeamFactory.php │ └── UserFactory.php ├── migrations │ ├── 0001_01_01_000000_create_users_table.php │ ├── 0001_01_01_000001_create_cache_table.php │ ├── 0001_01_01_000002_create_jobs_table.php │ ├── 2024_04_28_125542_add_two_factor_columns_to_users_table.php │ ├── 2024_04_28_125548_create_personal_access_tokens_table.php │ ├── 2024_04_28_125548_create_teams_table.php │ ├── 2024_04_28_125549_create_team_user_table.php │ └── 2024_04_28_125550_create_team_invitations_table.php └── seeders │ └── DatabaseSeeder.php ├── jsconfig.json ├── package-lock.json ├── package.json ├── phpunit.xml ├── pint.json ├── postcss.config.js ├── public ├── .htaccess ├── favicon.ico ├── index.php ├── manifest.json └── robots.txt ├── resources ├── css │ └── app.css ├── js │ ├── app.js │ ├── components │ │ ├── Logo.vue │ │ ├── Navigation.vue │ │ └── user │ │ │ ├── PasswordUpdate.vue │ │ │ ├── ProfileUpdate.vue │ │ │ └── TwoFactoreAuthentication.vue │ ├── layouts │ │ ├── App.vue │ │ ├── Authenticated.vue │ │ └── Guest.vue │ ├── pages │ │ ├── Home.vue │ │ ├── NotFound.vue │ │ ├── User.vue │ │ └── auth │ │ │ ├── ConfirmPassword.vue │ │ │ ├── ForgotPassword.vue │ │ │ ├── Login.vue │ │ │ ├── Register.vue │ │ │ ├── ResetPassword.vue │ │ │ ├── TwoFactorChallenge.vue │ │ │ └── VerifyEmail.vue │ ├── router │ │ └── index.js │ └── stores │ │ └── auth.js ├── markdown │ ├── policy.md │ └── terms.md └── views │ ├── app.blade.php │ └── emails │ └── team-invitation.blade.php ├── routes ├── api.php ├── console.php └── web.php ├── storage ├── app │ ├── .gitignore │ └── public │ │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ ├── .gitignore │ │ └── data │ │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tailwind.config.js ├── tests ├── Feature │ ├── AuthenticationTest.php │ ├── EmailVerificationTest.php │ ├── ExampleTest.php │ ├── PasswordConfirmationTest.php │ ├── PasswordResetTest.php │ ├── ProfileInformationTest.php │ ├── RegistrationTest.php │ ├── TwoFactorAuthenticationTest.php │ └── UpdatePasswordTest.php ├── TestCase.php └── Unit │ └── ExampleTest.php └── vite.config.js /.chipperci.yml: -------------------------------------------------------------------------------- 1 | version: 1 2 | 3 | environment: 4 | php: 8.3 5 | node: 16 6 | 7 | pipeline: 8 | - name: Setup 9 | cmd: | 10 | cp -v .env.testing .env 11 | composer install --no-interaction --prefer-dist --optimize-autoloader 12 | php artisan key:generate 13 | mkdir -p database 14 | touch database/database.sqlite 15 | php artisan migrate 16 | 17 | - name: Compile Assets 18 | cmd: | 19 | npm install 20 | npm run build 21 | 22 | - name: Run Tests 23 | cmd: phpunit 24 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 4 7 | indent_style = space 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml,vue,js}] 15 | indent_size = 2 16 | 17 | [docker-compose.yml] 18 | indent_size = 4 19 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME="Vue Laravel SPA" 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_TIMEZONE=UTC 6 | APP_URL=http://vue-laravel-spa.test 7 | 8 | APP_LOCALE=en 9 | APP_FALLBACK_LOCALE=en 10 | APP_FAKER_LOCALE=en_US 11 | 12 | APP_MAINTENANCE_DRIVER=file 13 | APP_MAINTENANCE_STORE=database 14 | 15 | BCRYPT_ROUNDS=12 16 | 17 | LOG_CHANNEL=stack 18 | LOG_STACK=single 19 | LOG_DEPRECATIONS_CHANNEL=null 20 | LOG_LEVEL=debug 21 | 22 | DB_CONNECTION=sqlite 23 | # DB_HOST=127.0.0.1 24 | # DB_PORT=3306 25 | # DB_DATABASE=laravel 26 | # DB_USERNAME=root 27 | # DB_PASSWORD= 28 | 29 | SESSION_DRIVER=database 30 | SESSION_LIFETIME=120 31 | SESSION_ENCRYPT=false 32 | SESSION_PATH=/ 33 | SESSION_DOMAIN=null 34 | 35 | BROADCAST_CONNECTION=log 36 | FILESYSTEM_DISK=local 37 | QUEUE_CONNECTION=database 38 | 39 | CACHE_STORE=database 40 | CACHE_PREFIX= 41 | 42 | MEMCACHED_HOST=127.0.0.1 43 | 44 | REDIS_CLIENT=phpredis 45 | REDIS_HOST=127.0.0.1 46 | REDIS_PASSWORD=null 47 | REDIS_PORT=6379 48 | 49 | MAIL_MAILER=log 50 | MAIL_HOST=127.0.0.1 51 | MAIL_PORT=2525 52 | MAIL_USERNAME=null 53 | MAIL_PASSWORD=null 54 | MAIL_ENCRYPTION=null 55 | MAIL_FROM_ADDRESS="hello@example.com" 56 | MAIL_FROM_NAME="${APP_NAME}" 57 | 58 | AWS_ACCESS_KEY_ID= 59 | AWS_SECRET_ACCESS_KEY= 60 | AWS_DEFAULT_REGION=us-east-1 61 | AWS_BUCKET= 62 | AWS_USE_PATH_STYLE_ENDPOINT=false 63 | 64 | VITE_APP_NAME="${APP_NAME}" 65 | -------------------------------------------------------------------------------- /.env.testing: -------------------------------------------------------------------------------- 1 | APP_NAME="Vue Laravel SPA" 2 | APP_ENV=local 3 | APP_KEY=base64:LVFvXoJkxD20eZcneq/+ERpmLaRwRnfebih2PCxp5qo= 4 | APP_DEBUG=true 5 | APP_URL=http://localhost 6 | 7 | LOG_CHANNEL=stack 8 | LOG_DEPRECATIONS_CHANNEL=null 9 | LOG_LEVEL=debug 10 | 11 | DB_CONNECTION=sqlite 12 | BROADCAST_DRIVER=log 13 | CACHE_DRIVER=file 14 | FILESYSTEM_DISK=local 15 | QUEUE_CONNECTION=sync 16 | SESSION_DRIVER=file 17 | SESSION_LIFETIME=120 18 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | 3 | *.blade.php diff=html 4 | *.css diff=css 5 | *.html diff=html 6 | *.md diff=markdown 7 | *.php diff=php 8 | 9 | /.github export-ignore 10 | CHANGELOG.md export-ignore 11 | .styleci.yml export-ignore 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.phpunit.cache 3 | /node_modules 4 | /public/build 5 | /public/hot 6 | /public/storage 7 | /storage/*.key 8 | /vendor 9 | .env 10 | .env.backup 11 | .env.production 12 | .phpunit.result.cache 13 | Homestead.json 14 | Homestead.yaml 15 | auth.json 16 | npm-debug.log 17 | yarn-error.log 18 | /.fleet 19 | /.idea 20 | /.vscode 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
7 | When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. 8 | You may retrieve this token from your phone's Google Authenticator application. 9 |
10 | 11 |7 | Update your account's profile information and email address. 8 |
9 |17 | Ensure your account is using a long, random password to stay secure. 18 |
19 |27 | Add additional security to your account using two factor authentication. 28 |
29 |You need to confirm your password in order to perform the requested action. 6 | After confirmation you can retry your action.
7 | 26 |Thanks for signing up! Before getting started, could you verify your email 7 | address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you 8 | another.
9 | 10 | 21 |