Ui-Skote/Laravel-vuejs/Admin/app/Http/Controllers/AuthenticationController.php

248 lines
6.6 KiB
PHP
Raw Permalink Normal View History

2022-09-08 15:06:44 -04:00
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use App\Authentication;
use App\PasswordReset;
use Illuminate\Support\Str;
use App\Notifications\PasswordResetRequest;
use App\Notifications\PasswordResetSuccess;
use Illuminate\Http\Request;
use Carbon\Carbon;
class AuthenticationController extends Controller
{
public function login(Request $request)
{
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
'remember_me' => 'boolean'
]);
$credentials = request(['email', 'password']);
if (!Auth::attempt($credentials))
return response()->json([
'message' => 'Unauthorized'
], 401);
$user = $request->user();
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
if ($request->remember_me)
$token->expires_at = Carbon::now()->addWeeks(1);
$token->save();
return response()->json([
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse(
$tokenResult->token->expires_at
)->toDateTimeString()
]);
}
public function store(Request $request)
{
$data = $request->validate([
'username' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8'],
]);
$user = Authentication::create([
'username' => $data['username'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
return response()->json($user, 201);
}
public function logout(Request $request)
{
if (Auth::check()) {
Auth::user()->AauthAcessToken()->delete();
}
return response()->json([
'message' => 'Successfully logged out'
]);
}
/**
* Create token password reset
*
* @param [string] email
* @return [string] message
*/
public function create(Request $request)
{
$request->validate([
'email' => 'required|string|email',
]);
$user = Authentication::where('email', $request->email)->first();
if (!$user)
return response()->json([
'message' => "We can't find a user with that e-mail address."
], 404);
$passwordReset = PasswordReset::updateOrCreate(
['email' => $user->email],
[
'email' => $user->email,
'token' => Str::random(60)
]
);
if ($user && $passwordReset)
$user->notify(
new PasswordResetRequest($passwordReset->token)
);
return response()->json([
'message' => 'We have e-mailed your password reset link!'
]);
}
/**
* Find token password reset
*
* @param [string] $token
* @return [string] message
* @return [json] passwordReset object
*/
public function find($token)
{
$passwordReset = PasswordReset::where('token', $token)
->first();
if (!$passwordReset)
return response()->json([
'message' => 'This password reset token is invalid.'
], 404);
if (Carbon::parse($passwordReset->updated_at)->addMinutes(720)->isPast()) {
$passwordReset->delete();
return response()->json([
'message' => 'This password reset token is invalid.'
], 404);
}
return response()->json($passwordReset);
}
/**
* Reset password
*
* @param [string] email
* @param [string] password
* @param [string] password_confirmation
* @param [string] token
* @return [string] message
* @return [json] user object
*/
public function reset(Request $request)
{
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string|confirmed',
'token' => 'required|string'
]);
$passwordReset = PasswordReset::where([
['token', $request->token],
['email', $request->email]
])->first();
if (!$passwordReset)
return response()->json([
'message' => 'This password reset token is invalid.'
], 404);
$user = Authentication::where('email', $passwordReset->email)->first();
if (!$user)
return response()->json([
'message' => "We can't find a user with that e-mail address."
], 404);
$user->password = bcrypt($request->password);
$user->save();
$passwordReset->delete();
$user->notify(new PasswordResetSuccess($passwordReset));
return response()->json($user);
}
/**
* Get the authenticated User
*
* @return [json] user object
*/
public function user(Request $request)
{
return response()->json($request->user());
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
// public function create()
// {
// //
// }
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
// public function store(Request $request)
// {
// //
// }
/**
* Display the specified resource.
*
* @param \App\Auth $auth
* @return \Illuminate\Http\Response
*/
public function show(Auth $auth)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Auth $auth
* @return \Illuminate\Http\Response
*/
public function edit(Auth $auth)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Auth $auth
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Auth $auth)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Auth $auth
* @return \Illuminate\Http\Response
*/
public function destroy(Auth $auth)
{
//
}
}