mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-05-13 08:45:01 +00:00
add user email verification
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Http\Controllers\User;
|
namespace App\Http\Controllers\User;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Services\DemoService;
|
use App\Services\DemoService;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
@@ -11,6 +12,7 @@ use Illuminate\Support\Facades\Validator;
|
|||||||
use App\Http\Resources\UserStorageResource;
|
use App\Http\Resources\UserStorageResource;
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||||
use App\Http\Requests\User\UpdateUserPasswordRequest;
|
use App\Http\Requests\User\UpdateUserPasswordRequest;
|
||||||
|
use Laravel\Sanctum\PersonalAccessToken;
|
||||||
|
|
||||||
class AccountController extends Controller
|
class AccountController extends Controller
|
||||||
{
|
{
|
||||||
@@ -158,10 +160,50 @@ class AccountController extends Controller
|
|||||||
* @param $id
|
* @param $id
|
||||||
* @return ResponseFactory|\Illuminate\Http\Response
|
* @return ResponseFactory|\Illuminate\Http\Response
|
||||||
*/
|
*/
|
||||||
public function revoke_token($id)
|
public function revoke_token(PersonalAccessToken $token)
|
||||||
{
|
{
|
||||||
Auth::user()->tokens()->whereId($id)->delete();
|
if(Auth::user()->id !== $token->tokenable_id) {
|
||||||
|
return response('Unauthorized', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$token->delete();
|
||||||
|
|
||||||
return response('Deleted!', 204);
|
return response('Deleted!', 204);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Email verification
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @param User $user
|
||||||
|
* @return ResponseFactory|\Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function email_verify(User $user, Request $request)
|
||||||
|
{
|
||||||
|
if (!$request->hasValidSignature()) {
|
||||||
|
return response("Invalid/Expired url provided.", 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$user->hasVerifiedEmail()) {
|
||||||
|
$user->markEmailAsVerified();
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect()->to('/');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resend verification email
|
||||||
|
*
|
||||||
|
* @return ResponseFactory|\Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function resend_verify_email()
|
||||||
|
{
|
||||||
|
if (Auth::user()->hasVerifiedEmail()) {
|
||||||
|
return response("Email already verified.", 204);
|
||||||
|
}
|
||||||
|
|
||||||
|
Auth::user()->sendEmailVerificationNotification();
|
||||||
|
|
||||||
|
return response("Email verification link sent on your email", 200);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -13,8 +13,9 @@ use Illuminate\Support\Facades\Storage;
|
|||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
|
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||||
|
|
||||||
class User extends Authenticatable
|
class User extends Authenticatable implements MustVerifyEmail
|
||||||
{
|
{
|
||||||
use Notifiable, Billable, Sortable, HasFactory, HasApiTokens;
|
use Notifiable, Billable, Sortable, HasFactory, HasApiTokens;
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -7,10 +7,14 @@ use App\Http\Controllers\User\PaymentMethodsController;
|
|||||||
|
|
||||||
Route::post('/check', [AuthController::class, 'check_account']);
|
Route::post('/check', [AuthController::class, 'check_account']);
|
||||||
|
|
||||||
|
// Email verification
|
||||||
|
Route::get('email/verify/{user}', [AccountController::class, 'email_verify'])->name('verification.verify');
|
||||||
|
|
||||||
Route::group(['middleware' => ['auth:sanctum']], function () {
|
Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||||
// Account
|
// Account
|
||||||
Route::patch('/relationships/settings', [AccountController::class, 'update_user_settings']);
|
Route::patch('/relationships/settings', [AccountController::class, 'update_user_settings']);
|
||||||
Route::delete('/token/revoke/{id}', [AccountController::class, 'revoke_token']);
|
Route::post('/email/resend/verify', [AccountController::class, 'resend_verify_email']);
|
||||||
|
Route::delete('/token/revoke/{token}', [AccountController::class, 'revoke_token']);
|
||||||
Route::post('/token/create', [AccountController::class, 'create_token']);
|
Route::post('/token/create', [AccountController::class, 'create_token']);
|
||||||
Route::post('/password', [AccountController::class, 'change_password']);
|
Route::post('/password', [AccountController::class, 'change_password']);
|
||||||
Route::get('/subscription', [SubscriptionController::class, 'show']);
|
Route::get('/subscription', [SubscriptionController::class, 'show']);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ namespace Tests\Feature\Accounts;
|
|||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Notifications\ResetPassword;
|
use App\Notifications\ResetPassword;
|
||||||
|
use Illuminate\Auth\Notifications\VerifyEmail;
|
||||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||||
use Illuminate\Support\Facades\Password;
|
use Illuminate\Support\Facades\Password;
|
||||||
use Laravel\Sanctum\Sanctum;
|
use Laravel\Sanctum\Sanctum;
|
||||||
@@ -42,6 +43,8 @@ class AuthTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function it_register_user()
|
public function it_register_user()
|
||||||
{
|
{
|
||||||
|
Notification::fake();
|
||||||
|
|
||||||
collect([
|
collect([
|
||||||
[
|
[
|
||||||
'name' => 'storage_default',
|
'name' => 'storage_default',
|
||||||
@@ -76,6 +79,8 @@ class AuthTest extends TestCase
|
|||||||
|
|
||||||
Storage::disk('local')
|
Storage::disk('local')
|
||||||
->assertExists('files/' . User::first()->id);
|
->assertExists('files/' . User::first()->id);
|
||||||
|
|
||||||
|
Notification::assertTimesSent(1, VerifyEmail::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,10 +6,12 @@ use App\Models\User;
|
|||||||
use App\Services\SetupService;
|
use App\Services\SetupService;
|
||||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Auth\Notifications\VerifyEmail;
|
||||||
use Illuminate\Foundation\Testing\WithFaker;
|
use Illuminate\Foundation\Testing\WithFaker;
|
||||||
use Illuminate\Http\UploadedFile;
|
use Illuminate\Http\UploadedFile;
|
||||||
use Laravel\Sanctum\Sanctum;
|
use Laravel\Sanctum\Sanctum;
|
||||||
use Storage;
|
use Storage;
|
||||||
|
use Notification;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
use App\Models\Folder;
|
use App\Models\Folder;
|
||||||
|
|
||||||
@@ -191,7 +193,6 @@ class UserAccountTest extends TestCase
|
|||||||
$this->assertDatabaseMissing('personal_access_tokens', [
|
$this->assertDatabaseMissing('personal_access_tokens', [
|
||||||
'id' => $token_id
|
'id' => $token_id
|
||||||
]);
|
]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -225,7 +226,7 @@ class UserAccountTest extends TestCase
|
|||||||
public function it_use_user_token_to_request()
|
public function it_use_user_token_to_request()
|
||||||
{
|
{
|
||||||
$user = User::factory(User::class)
|
$user = User::factory(User::class)
|
||||||
->create();
|
->create();
|
||||||
|
|
||||||
$folder = Folder::factory(Folder::class)
|
$folder = Folder::factory(Folder::class)
|
||||||
->create([
|
->create([
|
||||||
@@ -256,7 +257,39 @@ class UserAccountTest extends TestCase
|
|||||||
// 'user_id' => $user->id,
|
// 'user_id' => $user->id,
|
||||||
// ]);
|
// ]);
|
||||||
|
|
||||||
dd($response);
|
// dd($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_user_email_verify()
|
||||||
|
{
|
||||||
|
$user = User::factory(User::class)
|
||||||
|
->create();
|
||||||
|
|
||||||
|
$this->getJson("/api/user/email/verify/$user->id");
|
||||||
|
|
||||||
|
$this->assertNotNull($user->email_verified_at);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_resend_user_verify_email()
|
||||||
|
{
|
||||||
|
Notification::fake();
|
||||||
|
|
||||||
|
$user = User::factory(User::class)
|
||||||
|
->create([
|
||||||
|
'email_verified_at' => null
|
||||||
|
]);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$this->postJson('/api/user/email/resend/verify')
|
||||||
|
->assertStatus(200);
|
||||||
|
|
||||||
|
Notification::assertTimesSent(1, VerifyEmail::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user