Angular - 向服务器 1 或服务器 2 发送服务请求,具体取决于将登录的用户

问题描述 投票:0回答:1

目前用于开发我有这个环境配置:

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/.

完成任何进一步的请求

我现在的问题是如何以最好的方式做到这一点?

rest ionic-framework design-patterns anguar
1个回答
0
投票

您可以定义一个

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 问题。

© www.soinside.com 2019 - 2024. All rights reserved.