Refactor Auth controllers : thicker, with Form requests & API resource

This commit is contained in:
Bubka
2021-10-01 13:40:37 +02:00
parent 1a51cf967a
commit a5514ba06b
14 changed files with 270 additions and 109 deletions

View File

@ -31,7 +31,7 @@ class LoginController extends Controller
/**
* Handle a login request to the application.
*
* @param \Illuminate\Http\Request $request
* @param \App\Http\Requests\CaseInsensitiveLogin $request
* @return \Illuminate\Http\JsonResponse
*
* @throws \Illuminate\Validation\ValidationException
@ -61,6 +61,21 @@ class LoginController extends Controller
return $this->sendFailedLoginResponse($request);
}
/**
* log out current user
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function logout(Request $request)
{
$accessToken = Auth::user()->token();
$accessToken->revoke();
return response()->json(['message' => 'signed out'], Response::HTTP_OK);
}
/**
* Send the response after the user was authenticated.
*
@ -83,6 +98,7 @@ class LoginController extends Controller
], Response::HTTP_OK);
}
/**
* Get the failed login response instance.
*
@ -93,6 +109,7 @@ class LoginController extends Controller
{
return response()->json(['message' => 'unauthorised'], Response::HTTP_UNAUTHORIZED);
}
/**
* Redirect the user after determining they are locked out.
@ -109,6 +126,7 @@ class LoginController extends Controller
return response()->json(['message' => Lang::get('auth.throttle', ['seconds' => $seconds])], Response::HTTP_TOO_MANY_REQUESTS);
}
/**
* Get the needed authorization credentials from the request.
*

View File

@ -0,0 +1,35 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Requests\UserPatchPwdRequest;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class PasswordController extends Controller
{
/**
* Update the user's password.
*
* @param \App\Http\Requests\UserPatchPwdRequest $request
* @return \Illuminate\Http\Response
*/
public function update(UserPatchPwdRequest $request)
{
$validated = $request->validated();
if (!Hash::check( $validated['currentPassword'], Auth::user()->password) ) {
return response()->json(['message' => __('errors.wrong_current_password')], 400);
}
if (!config('2fauth.config.isDemoApp') ) {
$request->user()->update([
'password' => bcrypt($validated['password']),
]);
}
return response()->json(['message' => __('auth.forms.password_successfully_changed')]);
}
}

View File

@ -3,6 +3,7 @@
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Requests\UserStoreRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
@ -10,6 +11,7 @@ use Illuminate\Support\Facades\Hash;
use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Validation\ValidationException;
class RegisterController extends Controller
{
@ -25,44 +27,24 @@ class RegisterController extends Controller
*/
use RegistersUsers;
/**
* check if a user exists
* @param Request $request [description]
* @return json
*/
public function checkUser()
{
$user = DB::table('users')->first();
return response()->json(['username' => isset($user->name) ? $user->name : null], 200);
}
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @param \App\Http\Requests\UserStoreRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function register(Request $request)
public function register(UserStoreRequest $request)
{
// check if a user already exists
if( DB::table('users')->count() > 0 ) {
// return response()->json(['message' => __('errors.already_one_user_registered')], 400);
throw \Illuminate\Validation\ValidationException::withMessages(['taken' => __('errors.already_one_user_registered')]);
}
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
//$this->guard()->login($user);
$validated = $request->validated();
event(new Registered($user = $this->create($validated)));
return response()->json([
'message' => 'account created',
'token' => $user->createToken('MyApp')->accessToken,
'token' => $user->createToken('2FAuth')->accessToken,
'name' => $user->name,
]);
], 201);
}

View File

@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Requests\UserUpdateRequest;
use App\Http\Resources\UserResource;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
/**
* Get detailed information about a user
*
* @return \App\Http\Resources\UserResource
*/
public function show()
{
$user = User::first();
return $user
? new UserResource($user)
: response()->json(['name' => null], 200);
}
/**
* Update the user's profile information.
*
* @param \App\Http\Requests\UserUpdateRequest $request
* @return \App\Http\Resources\UserResource
*/
public function update(UserUpdateRequest $request)
{
$user = $request->user();
$validated = $request->validated();
if (!Hash::check( $request->password, Auth::user()->password) ) {
return response()->json(['message' => __('errors.wrong_current_password')], 400);
}
if (!config('2fauth.config.isDemoApp') ) {
tap($user)->update([
'name' => $validated['name'],
'email' => $validated['email'],
]);
}
return new UserResource($user);
}
}