Невозможно выполнить вход с любого другого порта и устройства, кроме исходного приложения 8100 ionic - PullRequest
0 голосов
/ 11 апреля 2019

Я создал ионное приложение. Я могу запустить его в браузере с портом 8100. Но не удается войти с симулятора или любого другого порта. Я использовал httpClient, чтобы получить слушателя. Не могли бы вы вести меня?

Вот мой код вызова API.

import { Injectable } from '@angular/core';
import { Platform, AlertController } from '@ionic/angular';
import { Storage } from '@ionic/storage';
import { BehaviorSubject } from 'rxjs';
import { mcsConfig } from "../../oracle_mobile_cloud_config";
import { LoadingController } from '@ionic/angular';

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { HTTP } from '@ionic-native/http/ngx';
// Alternative use
import {Http, Headers } from '@angular/http';
import { User } from '../models/user';

import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer/ngx';
import { presentAlert } from "../utils/ui-utility.service";
import { IMCS, INetworkResponse } from 'mcs';
import * as mcssdk from 'mcs';
import { ReportItem } from '../models/ReportItem';
import { utils } from 'protractor';

const TOKEN_KEY = 'auth-token';

 // Alternative use
 var careheaders = new Headers();
 careheaders.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');


@Injectable({
  providedIn: 'root'
})
export class OraclemcsService {
  fileTransfer: FileTransferObject = this.transfer.create();
  mcs: IMCS = mcssdk;
  authenticationState = new BehaviorSubject(false);
  public userProfile;
  public lovActivityCode;
  public lovObsCode;
  public lovVesselCode;
  public lovYardCode;
  public lovDepartCode;

  public cookie;

  constructor(private storage: Storage
    , private plt: Platform
    , public loadingController: LoadingController
    , private httpClient: HttpClient

    , private http: HTTP
    //, private https: Http

    , private transfer: FileTransfer
    , public alertController: AlertController

  ) {
    this.plt.ready().then(() => {
      //this.checkToken();
      this.mcs.init(mcsConfig);
      this.userProfile, this.lovActivityCode, this.lovObsCode, this.lovVesselCode, this.lovYardCode, this.lovDepartCode, this.cookie = {};
    });
  }
  checkToken() {
    this.storage.get(TOKEN_KEY).then(res => {
      if (res) {
        this.authenticationState.next(true);
      }
    })
  }

  /**
   * on login initialize lov
   * login to oracle idcs
   * @param username 
   * @param password 
   */
  login(username: String, password: String) {
    if(username === undefined || username === '' || password === undefined || password === null){
      presentAlert("No username or password", this.alertController);
      return;
    }

    this.mcs.mobileBackend.setAuthenticationType(this.mcs.AUTHENTICATION_TYPES.oauth);
    this.mcs.mobileBackend.authorization.authenticate(username, password).then(
      () => {
        return Promise.all([
          this.mcs.mobileBackend.customCode.invokeCustomCodeJSONRequest(mcsConfig.environment + '_api_care/lovs?code_table_name=activity_code', 'GET', null)
          , this.mcs.mobileBackend.customCode.invokeCustomCodeJSONRequest(mcsConfig.environment + '_api_care/lovs?code_table_name=observation_code', 'GET', null)
          , this.mcs.mobileBackend.customCode.invokeCustomCodeJSONRequest(mcsConfig.environment + '_api_care/lovs?code_table_name=vessel_code', 'GET', null)
          , this.mcs.mobileBackend.customCode.invokeCustomCodeJSONRequest(mcsConfig.environment + '_api_care/lovs?code_table_name=yard_code', 'GET', null)
          , this.mcs.mobileBackend.customCode.invokeCustomCodeJSONRequest(mcsConfig.environment + '_api_care/lovs?code_table_name=from_department_code', 'GET', null)
        ]).then((values) => {
          this.lovActivityCode = values[0].data.items;
          this.lovObsCode = values[1].data.items;
          this.lovVesselCode = values[2].data.items;
          this.lovYardCode = values[3].data.items;
          this.lovDepartCode = values[4].data.items;
        });
      }
    ).then(() => {
      console.log('test2' + username + password);
      this.getUserRole();
      this.authenticationState.next(true);
    }).catch(err => {
      presentAlert(err.data.error_description, this.alertController);
    });

  }



  logout() {
    this.mcs.mobileBackend.authorization.logout();
    this.authenticationState.next(false);
  }

  /**
   * get oracle mcs header to append
   */ 
  getMcsHeaders() {
    var cheaders = {};
    for (let key in this.mcs.mobileBackend.getHttpHeaders()) {
      cheaders[key] = this.mcs.mobileBackend.getHttpHeaders()[key];
    }
    return cheaders;
  } 

  isAuthenticated() {
    return this.authenticationState.value;
  }

  /**
   *  return observable
   */ 
  getUserRole() {
    return this.httpClient.get(this.mcs.mobileBackend.getPlatformUrl('users/me'), { headers: this.getMcsHeaders() }).subscribe((res) => {
      console.log(res);
    });
  } 

  getProfile() {
    return this.mcs.mobileBackend.customCode
      .invokeCustomCodeJSONRequest(mcsConfig.environment + '_api_care/my/profile', 'GET', null);
  }

  /**
   * return observable
   * @param userProfile 
   */
  updateProfile(userProfile) {
    return this.httpClient.patch(this.mcs.mobileBackend.getCustomCodeUrl(mcsConfig.environment + '_api_care/my/profile'), userProfile, { headers: this.getMcsHeaders() });
  }

  setProfile(userProfile) {
    console.log("inside set profile");
    this.userProfile = userProfile;
  }

  getReportList(offset: number = 0, limit: number = mcsConfig.rowLimit) {
    let queryParam = '?offset=' + (offset * limit) + '&limit=' + limit;
    return this.mcs.mobileBackend.customCode
      .invokeCustomCodeJSONRequest(mcsConfig.environment + '_api_care/my/incidents' + queryParam, 'GET', null);
  }

  getReportDetail(id: string) {
    return this.mcs.mobileBackend.customCode
      .invokeCustomCodeJSONRequest(mcsConfig.environment + '_api_care/my/incidents/' + id, 'GET', null);
  }

  createReportDetail(detail: ReportItem) {
    console.log('test' + JSON.stringify(detail));
    return this.mcs.mobileBackend.customCode
      .invokeCustomCodeJSONRequest(mcsConfig.environment + '_api_care/my/incidents', 'POST', detail);

  } 

  uploadReportPhoto(fileUrl, id: number) {
    var headerArr = this.getMcsHeaders();
    headerArr['Content-Type'] = 'application/octet-stream';

    id = id + 1;
    let options: FileUploadOptions = {
      fileKey: 'file',
      fileName: 'name.jpg',
      headers: headerArr
    }

    return this.fileTransfer.upload(fileUrl, this.mcs.mobileBackend.getCustomCodeUrl(mcsConfig.environment + '_api_care/my/latest_incident/photo' + (id == 1 ? '' : id)), options);

  }

  getLovActivityCode() {
    return this.lovActivityCode;
  }

  getLovObsCode() {
    return this.lovObsCode;
  }

  getLovVesselCode() {
    return this.lovVesselCode;
  }

  getLovYardCode() {
    return this.lovYardCode;
  }

  getLovDepartCode() {
    return this.lovDepartCode;
  }

}

Когда я запускаю на эмуляторе, сообщение об ошибке отображается следующим образом: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Исходный код 'http://localhost' поэтому запрещен доступ.

1 Ответ

0 голосов
/ 12 апреля 2019

Вы также должны разрешить запрос Cross Origin на принимающем сервере. Если это почтовый вызов, то получатель может не принять его из-за того, что он приходит из какого-то неизвестного источника.

Чтобы работать через него,Разрешить получателю принимать запрос кросс-источника.

Пример -

  1. Сторона приложения

    < access origin="*" / >
    < access origin="http://*" / >
    < access origin="https://*" / >
    
  2. В API Java REST API мыиспользуйте аннотацию, как указано ниже:

    @CrossOrigin(origins = "*")
    

Вы можете проверить свой код или поделиться им здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...