validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6|confirmed', ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), 'role_id' => 2, ]); try { $token = JWTAuth::fromUser($user); } catch (JWTException $e) { return response()->json(['error' => 'Could not create token'], 500); } $user->load('role'); return response()->json([ 'token' => $token, 'user' => $user, ], 201); } public function login(LoginRequest $request) { $login = JWTAuth::attempt([ "email" => $request->email, "password" => $request->password ]); if(!$login) { return response()->json([ 'message' => 'Credenciais inválidas', 'errors' => null, ], 400); } $user = auth()->user(); $token = JWTAuth::claims([ "role_id" => $user->role_id ])->fromUser($user); return response()->json([ "access_token" => $token, "token_type" => "Bearer", "expires_in" => JWTAuth::factory()->getTTL() * 60, "user" => [ "id" => $user->id, "name" => $user->name, "email" => $user->email, "role_id" => $user->role_id, "password" => $user->password, "created_at" => $user->created_at, ], ]); } public function refresh(Request $request) { try { $newAccessToken = JWTAuth::setToken($request->refresh_token)->refresh(); } catch (JWTException $e) { return response()->json(['error' => 'Refresh token expirado, faça login novamente'], 401); } return response()->json([ 'access_token' => $newAccessToken, 'expires_in' => JWTAuth::factory()->getTTL() * 60, ]); } public function logout() { try { JWTAuth::invalidate(JWTAuth::getToken()); } catch (JWTException $e) { return response()->json(['error' => 'Erro ao realizar logout, tente novamente'], 500); } return redirect()->route('login'); } public function me() { $user = auth()->user(); return response()->json([ 'message' => 'Utilizador obtido com sucesso', 'data' => [ 'id' => $user->id, 'role_id' => $user->role_id, ], 'errors' => null, ], 200); } }