update pay function
This commit is contained in:
103
src/views/AgentChat/neuratalk/lib/auth.ts
Normal file
103
src/views/AgentChat/neuratalk/lib/auth.ts
Normal file
@@ -0,0 +1,103 @@
|
||||
// lib/auth.ts - 简化版认证工具
|
||||
// 用于在 Next.js 中获取主应用的登录信息
|
||||
|
||||
export interface User {
|
||||
id: string;
|
||||
username: string;
|
||||
email: string;
|
||||
subscription_tier: string;
|
||||
avatar?: string;
|
||||
}
|
||||
|
||||
export interface AuthInfo {
|
||||
isAuthenticated: boolean;
|
||||
user?: User;
|
||||
canAccessChat?: boolean;
|
||||
message?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 客户端检查认证状态
|
||||
* 直接调用 Flask 后端的 session 接口
|
||||
*/
|
||||
export async function checkAuth(): Promise<AuthInfo> {
|
||||
try {
|
||||
// 调用主应用的 session 检查接口
|
||||
const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/auth/session`, {
|
||||
credentials: 'include', // 重要:携带 Cookie
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
return { isAuthenticated: false };
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
// 检查是否登录
|
||||
if (!data.isAuthenticated || !data.user) {
|
||||
return {
|
||||
isAuthenticated: false,
|
||||
message: '请先登录'
|
||||
};
|
||||
}
|
||||
|
||||
// 检查订阅权限
|
||||
const canAccessChat = ['premium', 'pro', 'enterprise'].includes(
|
||||
data.user.subscription_tier?.toLowerCase()
|
||||
);
|
||||
|
||||
return {
|
||||
isAuthenticated: true,
|
||||
user: data.user,
|
||||
canAccessChat,
|
||||
message: canAccessChat ? undefined : '需要订阅才能使用 AI 助手功能'
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Auth check failed:', error);
|
||||
return {
|
||||
isAuthenticated: false,
|
||||
message: '认证服务暂时不可用'
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用 MCP API
|
||||
* 自动携带认证信息
|
||||
*/
|
||||
export async function callMCPApi(endpoint: string, options: RequestInit = {}) {
|
||||
const url = `${process.env.NEXT_PUBLIC_API_URL}${endpoint}`;
|
||||
|
||||
const response = await fetch(url, {
|
||||
...options,
|
||||
credentials: 'include', // 携带 Cookie
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
...options.headers,
|
||||
},
|
||||
});
|
||||
|
||||
if (response.status === 401) {
|
||||
// 未登录,跳转到主应用登录页
|
||||
window.location.href = `${process.env.NEXT_PUBLIC_MAIN_APP_URL}/auth/sign-in?redirect=/chat`;
|
||||
throw new Error('Unauthorized');
|
||||
}
|
||||
|
||||
if (response.status === 403) {
|
||||
// 无权限,跳转到订阅页
|
||||
window.location.href = `${process.env.NEXT_PUBLIC_MAIN_APP_URL}/subscription?feature=ai-chat`;
|
||||
throw new Error('Subscription required');
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 登出(跳转到主应用的登出接口)
|
||||
*/
|
||||
export function logout() {
|
||||
window.location.href = `${process.env.NEXT_PUBLIC_MAIN_APP_URL}/api/auth/logout?redirect=/`;
|
||||
}
|
||||
Reference in New Issue
Block a user