Skip to content

Commit ca6a310

Browse files
signup_login
1 parent b4bd10d commit ca6a310

File tree

6 files changed

+202
-0
lines changed

6 files changed

+202
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Api\Auth;
4+
5+
use App\Models\User;
6+
use App\Traits\ApiTrait;
7+
use Illuminate\Http\Request;
8+
use App\Http\Controllers\Controller;
9+
use Illuminate\Support\Facades\Auth;
10+
use Illuminate\Support\Facades\Hash;
11+
use App\Http\Requests\Auth\LoginRequest;
12+
13+
class LoginController extends Controller
14+
{
15+
public function login(LoginRequest $request)
16+
{
17+
$user = User::where('email', $request->email)->first();
18+
19+
if (!$user || !Hash::check($request->password, $user->password)) {
20+
return ApiTrait::errorMessage(
21+
['login' => __('Invalid email or password.')],
22+
__('Login failed. Please check your credentials.'),
23+
401
24+
);
25+
}
26+
27+
$token = $user->createToken('auth_token')->plainTextToken;
28+
$user->token = $token;
29+
30+
if (!$user->email_verified_at) {
31+
return ApiTrait::data(
32+
compact('user'),
33+
__('Your account is not verified. Please verify your email.'),
34+
401
35+
);
36+
}
37+
38+
return ApiTrait::data(
39+
compact('user'), ('Login successful.'), 200);
40+
}
41+
42+
public function logout(Request $request)
43+
{
44+
$user = Auth::guard('sanctum')->user();
45+
$user->currentAccessToken()->delete();
46+
return ApiTrait::successMessage(__('Logout successful.'));
47+
}
48+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Api\Auth;
4+
5+
use App\Models\User;
6+
use App\Traits\ApiTrait;
7+
use Illuminate\Http\Request;
8+
use App\Http\Controllers\Controller;
9+
use Illuminate\Support\Facades\Hash;
10+
use App\Http\Requests\Auth\SignupRequest;
11+
12+
class SignupController extends Controller
13+
{
14+
/**
15+
* Handle the incoming request.
16+
*
17+
* @param \Illuminate\Http\Request $request
18+
* @return \Illuminate\Http\Response
19+
*/
20+
public function __invoke(SignupRequest $request)
21+
{
22+
$data = $request->safe()->except('password_confirmation', 'password');
23+
$data['password'] = Hash::make($request->password);
24+
25+
try {
26+
$user = User::create($data);
27+
} catch (\Exception $e) {
28+
return ApiTrait::errorMessage([], "Something went wrong", 500);
29+
}
30+
31+
$token = $user->createToken('auth_token')->plainTextToken;
32+
$user->token = $token;
33+
34+
return ApiTrait::data(
35+
['user' => $user], "User Created Successfully", 201 );
36+
}
37+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Auth;
4+
5+
use Illuminate\Foundation\Http\FormRequest;
6+
7+
class LoginRequest extends FormRequest
8+
{
9+
/**
10+
* Determine if the user is authorized to make this request.
11+
*
12+
* @return bool
13+
*/
14+
public function authorize()
15+
{
16+
return true;
17+
}
18+
19+
/**
20+
* Get the validation rules that apply to the request.
21+
*
22+
* @return array<string, mixed>
23+
*/
24+
public function rules()
25+
{
26+
return [
27+
'email'=>['required','email','exists:users'],
28+
'password'=>['required'],
29+
];
30+
}
31+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Auth;
4+
5+
use Illuminate\Validation\Rule;
6+
use Illuminate\Foundation\Http\FormRequest;
7+
8+
class SignupRequest extends FormRequest
9+
{
10+
/**
11+
* Determine if the user is authorized to make this request.
12+
*
13+
* @return bool
14+
*/
15+
public function authorize()
16+
{
17+
return true;
18+
}
19+
20+
/**
21+
* Get the validation rules that apply to the request.
22+
*
23+
* @return array<string, mixed>
24+
*/
25+
public function rules()
26+
{
27+
return [
28+
'name'=>['required','alpha','between:3,32'],
29+
'email'=>['required','email','unique:users'],
30+
'password'=>['required','confirmed','min:6'],
31+
'password_confirmation'=>['required'],
32+
];
33+
}
34+
}

app/Traits/ApiTrait.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
namespace App\Traits;
3+
4+
use GrahamCampbell\ResultType\Success;
5+
6+
trait ApiTrait{
7+
public static function successMessage(string $message="",int $statusCode = 200)
8+
{
9+
return response()->json([
10+
'success'=>true,
11+
'message'=>$message,
12+
'data'=>(object)[],
13+
'errors'=>(object)[]
14+
],$statusCode);
15+
}
16+
17+
public static function errorMessage(array $errors,string$message="",int $statusCode = 422)
18+
{
19+
return response()->json([
20+
'success'=>false,
21+
'message'=>$message,
22+
'data'=>(object)[],
23+
'errors'=>(object)$errors
24+
],$statusCode);
25+
}
26+
27+
28+
public static function data(array $data,string $message = "",int $statusCode = 200)
29+
{
30+
return response()->json([
31+
'success'=>true,
32+
'message'=>$message,
33+
'data'=>(object)$data,
34+
'errors'=>(object)[]
35+
],$statusCode);
36+
}
37+
}

routes/api.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
use Illuminate\Http\Request;
44
use Illuminate\Support\Facades\Route;
5+
use App\Http\Controllers\Api\Auth\LoginController;
6+
use App\Http\Controllers\Api\Auth\SignupController;
57

68
/*
79
|--------------------------------------------------------------------------
@@ -17,3 +19,16 @@
1719
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
1820
return $request->user();
1921
});
22+
23+
Route::prefix('user')->group(function () {
24+
Route::post('/signup', SignupController::class); // guest
25+
26+
Route::controller(LoginController::class)->group(function () {
27+
Route::middleware('auth:sanctum')->group(function () {
28+
Route::get('/logout', 'logout'); //auth
29+
});
30+
31+
Route::post('/login', 'login'); // guest
32+
});
33+
34+
});

0 commit comments

Comments
 (0)