50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
'use client';
|
|
|
|
import { useEffect, useState } from 'react';
|
|
import { useSession } from 'next-auth/react';
|
|
|
|
export function RocketChatAuth() {
|
|
const { data: session } = useSession();
|
|
const [isAuthenticated, setIsAuthenticated] = useState(false);
|
|
|
|
useEffect(() => {
|
|
async function authenticateWithRocketChat() {
|
|
if (!session?.user?.email) return;
|
|
|
|
try {
|
|
// Call our API to get Rocket.Chat tokens
|
|
const response = await fetch('/api/auth/rocket-login');
|
|
|
|
if (!response.ok) {
|
|
console.error('Failed to authenticate with Rocket.Chat');
|
|
return;
|
|
}
|
|
|
|
const data = await response.json();
|
|
|
|
if (data.rocketChatToken && data.rocketChatUserId) {
|
|
// Store tokens in cookies that can be accessed by the Rocket.Chat iframe
|
|
// Note: These cookies need to have proper domain settings to be accessible
|
|
document.cookie = `rc_token=${data.rocketChatToken}; path=/; SameSite=None; Secure`;
|
|
document.cookie = `rc_uid=${data.rocketChatUserId}; path=/; SameSite=None; Secure`;
|
|
|
|
// Also store in localStorage which Rocket.Chat might check
|
|
localStorage.setItem('Meteor.loginToken', data.rocketChatToken);
|
|
localStorage.setItem('Meteor.userId', data.rocketChatUserId);
|
|
|
|
console.log('Successfully authenticated with Rocket.Chat');
|
|
setIsAuthenticated(true);
|
|
}
|
|
} catch (error) {
|
|
console.error('Error authenticating with Rocket.Chat:', error);
|
|
}
|
|
}
|
|
|
|
authenticateWithRocketChat();
|
|
}, [session]);
|
|
|
|
// This component doesn't render anything visible
|
|
return null;
|
|
}
|
|
|
|
export default RocketChatAuth;
|