Как подключить angular7 к liferay с помощью токена? - PullRequest
0 голосов
/ 24 февраля 2020

Liferay API по умолчанию защищен, чтобы обойти, что вы можете добавить «auth.verifier.guest.allowed = false» в @Component, чтобы вы могли работать без токена, но для защиты вашего API вы должны удалить его, Liferay уже реализует сервис для генерации токена, используя следующий токен service / o / oauth2 /, для получения дополнительной информации вы можете обратиться по этой ссылке https://aspiresoftware.in/blog/liferay-service-authorization-with-oauth2-0/. в моем случае я создаю две службы

declare var Liferay;

@Injectable({
  providedIn: 'root'
})
export class AuthSecurityService {

  token: any;
  constructor(private httpClient: HttpClient, private Cookie: CookieService, private handler: HttpBackend) {
    this.httpClient = new HttpClient(handler);
  }

  getClientInfo() {
    let container: any;
    console.log(container)
    let promise = new Promise((resolve, reject) => {
      Liferay.Service(
        '/oauthtwo.oauth2application/get-o-auth2-application',
        {
          companyId: fill companyId,
          clientId: fill id client
        },
        function (obj) {
          container = obj;
          if (container != null) {
            resolve(container);
          }
        }
      );
    });
    return promise;
  }

  obtainAccessToken(res: any) {
    let params = new URLSearchParams();
    params.append('grant_type', 'client_credentials');
    let headers =
      new HttpHeaders({
        'Content-type': 'application/x-www-form-urlencoded; charset=utf-8',
        'Authorization': 'Basic ' +
          btoa("id-client:" + res.clientSecret)
      });
    let options = { headers: headers };

    this.httpClient.post('/o/oauth2/token',
      params.toString(), options)
      .subscribe(
        data => this.saveToken(data),
        err => alert('Invalid Credentials'));
  }
  saveToken(token) {
    console.log(token)
    this.token = token;
    var expireDate = new Date().getTime() + (1000 * token.expires_in);
    this.Cookie.set("access_token", token.access_token);
  }
}

вторая служба

declare var Liferay;

@Injectable()
export class TokenInterceptorService implements HttpInterceptor {
  constructor(public Cookie: CookieService) {}
  intercept(request: HttpRequest<any>, next: HttpHandler){
    if(Liferay.ThemeDisplay.isSignedIn()){
      let headers = new HttpHeaders({
        'Authorization': 'Bearer ' + this.Cookie.get('access_token'),
        'Content-type': 'application/json'
      });
      request = request.clone({
        headers
      });

      return next.handle(request);
    }
  }
}

Я надеюсь, что это может кому-то помочь

...