Update environment configuration and enhance user management features
- Changed VITE_SUPABASE_URL in .env.example for deployment consistency. - Added new user management functionality to reset user passwords in UserManagement component. - Updated supabase.ts to include first and last name fields in user profiles and added password reset functionality. - Enhanced DashboardLayout to include a user profile view and improved user display in TopNavbar. - Updated seed.sql to create additional users with roles for testing purposes.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
-- Add change password function for users
|
||||
-- This migration adds a function to allow users to change their own password
|
||||
|
||||
-- Function to change user password (user can only change their own password)
|
||||
CREATE OR REPLACE FUNCTION public.change_user_password(
|
||||
current_password TEXT,
|
||||
new_password TEXT
|
||||
)
|
||||
RETURNS JSON AS $$
|
||||
DECLARE
|
||||
user_id UUID;
|
||||
user_email TEXT;
|
||||
result JSON;
|
||||
BEGIN
|
||||
-- Get current user ID
|
||||
user_id := auth.uid();
|
||||
|
||||
IF user_id IS NULL THEN
|
||||
RAISE EXCEPTION 'User not authenticated';
|
||||
END IF;
|
||||
|
||||
-- Get user email
|
||||
SELECT email INTO user_email
|
||||
FROM public.user_profiles
|
||||
WHERE id = user_id;
|
||||
|
||||
IF user_email IS NULL THEN
|
||||
RAISE EXCEPTION 'User profile not found';
|
||||
END IF;
|
||||
|
||||
-- Verify current password
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM auth.users
|
||||
WHERE id = user_id
|
||||
AND encrypted_password = crypt(current_password, encrypted_password)
|
||||
) THEN
|
||||
RAISE EXCEPTION 'Current password is incorrect';
|
||||
END IF;
|
||||
|
||||
-- Update the password in auth.users table
|
||||
UPDATE auth.users
|
||||
SET
|
||||
encrypted_password = crypt(new_password, gen_salt('bf')),
|
||||
updated_at = NOW()
|
||||
WHERE id = user_id;
|
||||
|
||||
-- Return result
|
||||
result := json_build_object(
|
||||
'user_id', user_id,
|
||||
'email', user_email,
|
||||
'password_changed_at', NOW()
|
||||
);
|
||||
|
||||
RETURN result;
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
RAISE;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
Reference in New Issue
Block a user