目前用于开发我有这个环境配置:
export const environment = {
production: false,
envName: 'dev',
apiEndpoint: 'https://url.to.server1/api/'
};
在 module.service.ts 服务中,我使用 apoEndpoint,如下所示:
myServiceMethod1(param: any): Observable<Array<Response>> {
return this.httpClient.get(environment.apiEndpoint + 'rest/service/url/...');
我现在必须解决的问题是,有两个服务器(带有端点的server1 https://url.to.server1/api/ 和带有端点的server2 https://url.to.server2/api/ ) - 完全相同的 ident 应用程序,但具有不同的 URL。
如果用户要登录,首先我必须在服务器 1 上显示该用户是否存在,如果不存在,则必须在服务器 2 上查找。 如果用户存储在 server2 的数据库中,则服务中的任何进一步请求都应使用 https://url.to.server2/api/。如果用户存储在 server1 的数据库中,则应使用 https://url.to.server1/api/.
完成任何进一步的请求我现在的问题是如何以最好的方式做到这一点?
您可以定义一个
InjectionToken
并通过工厂为所有 auth 模块提供它。
import {mainServer, fallbackServer} from '@env';
@Injectable('root')
export class AuthService {
private server: string;
auth(credentials): Observable<unknown> {
// resolve the server here
// store the server in this.server
}
}
export const AUTH_API = new InjectionToken<string>('com.my.project');
export const authApiProvider = {
provide: AUTH_API,
useFactory: () => {
const authService = inject(AuthService);
return authService.server;
};
}
然后,您可以在每个模块上使用
AUTH_API
提供 authApiProvider
。或者您可以创建一个拦截器来注入 AUTH_API
并将其设置为每个请求。
我鼓励您将此逻辑放在代理服务器后面的客户端之外,并将所有请求发送到为您的应用程序提供服务的服务器。这将提高安全性并防止您处理 CORS 问题。