144 lines
4.5 KiB
PHP
144 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use App\Models\User;
|
|
use Laravel\Sanctum\HasApiTokens;
|
|
use Illuminate\Support\Facades\Hash;
|
|
|
|
class AuthController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->middleware(['api', 'auth:api'], ['except' => ['login']]);
|
|
}
|
|
|
|
public function login(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'email' => 'required|email',
|
|
'password' => 'required|string|min:6',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json($validator->errors(), 422);
|
|
}
|
|
|
|
if (!$token = auth('api')->attempt($validator->validated())) {
|
|
return response()->json(['error' => 'Unauthorized'], 401);
|
|
}
|
|
|
|
return $this->createNewToken($token);
|
|
}
|
|
|
|
public function logout(Request $request)
|
|
{
|
|
Auth::guard('admin')->logout();
|
|
$request->session()->invalidate();
|
|
$request->session()->regenerateToken();
|
|
|
|
return redirect()->route('login');
|
|
}
|
|
|
|
public function refresh()
|
|
{
|
|
$user = auth('sanctum')->user(); // Ensure this is correct
|
|
if (!$user) {
|
|
return response()->json(['error' => 'User not found'], 404);
|
|
}
|
|
|
|
$token = $user->createToken('YourAppName')->plainTextToken; // Create a new token
|
|
return response()->json(['access_token' => $token], 200);
|
|
}
|
|
|
|
public function userProfile()
|
|
{
|
|
return response()->json(auth('api')->user());
|
|
}
|
|
|
|
public function updatePassword(Request $request)
|
|
{
|
|
try {
|
|
$validator = Validator::make($request->all(), [
|
|
'current_password' => 'required',
|
|
'new_password' => 'required|min:6',
|
|
'confirm_password' => 'required|same:new_password',
|
|
], [
|
|
'current_password.required' => 'Password saat ini harus diisi',
|
|
'new_password.required' => 'Password baru harus diisi',
|
|
'new_password.min' => 'Password baru minimal 6 karakter',
|
|
'confirm_password.required' => 'Konfirmasi password harus diisi',
|
|
'confirm_password.same' => 'Konfirmasi password tidak cocok',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json([
|
|
'status' => false,
|
|
'message' => 'Validasi gagal',
|
|
'errors' => $validator->errors()
|
|
], 422);
|
|
}
|
|
|
|
$user = auth('api')->user();
|
|
if (!$user) {
|
|
return response()->json([
|
|
'status' => false,
|
|
'message' => 'User tidak ditemukan'
|
|
], 404);
|
|
}
|
|
|
|
// Verify current password
|
|
if (!Hash::check($request->current_password, $user->password)) {
|
|
return response()->json([
|
|
'status' => false,
|
|
'message' => 'Password saat ini tidak sesuai'
|
|
], 400);
|
|
}
|
|
|
|
// Check if new password is same as current password
|
|
if (Hash::check($request->new_password, $user->password)) {
|
|
return response()->json([
|
|
'status' => false,
|
|
'message' => 'Password baru tidak boleh sama dengan password saat ini'
|
|
], 400);
|
|
}
|
|
|
|
// Update password
|
|
$user->password = Hash::make($request->new_password);
|
|
$saved = $user->save();
|
|
|
|
if (!$saved) {
|
|
return response()->json([
|
|
'status' => false,
|
|
'message' => 'Gagal menyimpan password baru'
|
|
], 500);
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => true,
|
|
'message' => 'Password berhasil diperbarui'
|
|
], 200);
|
|
|
|
} catch (\Exception $e) {
|
|
\Log::error('Password update error: ' . $e->getMessage());
|
|
return response()->json([
|
|
'status' => false,
|
|
'message' => 'Terjadi kesalahan: ' . $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
protected function createNewToken($token)
|
|
{
|
|
return response()->json([
|
|
'access_token' => $token,
|
|
'token_type' => 'bearer',
|
|
'expires_in' => config('sanctum.expiration') * 60,
|
|
'user' => auth('api')->user()
|
|
]);
|
|
}
|
|
}
|