Получите информацию о пользователе из приложения ui5 на панели запуска Cloud Foundry Fiori.

Как следует из названия, я пытаюсь получить информацию о пользователе из приложения, которое находится в FLP Cloud Foundry.

Я следил за следующим блогом: https://blogs.sap.com/2019/05/23/how-to-get-the-email-of-the-logged-in-user-in.-cloud-foundry/

Однако структура моего приложения отличается, и я не знаю, как заставить ее работать.

Во-первых, я могу подвести итог создания проекта по этим двум ссылкам:

  1. https://developers.sap.com/tutorials/cp-ui5-webide-new-app.html
  2. https://developers.sap.com/tutorials/cp-portal-cloud-foundry-create-launchpad.html

Вот структура моего приложения:

введите здесь описание изображения

Со связанным mta.yaml:

ID: mta_ztransport_appointment
_schema-version: '2.1'
parameters:
  deploy_mode: html5-repo
version: 0.0.1
modules:
  - name: mta-ztransport-appointment-approuter
    type: approuter.nodejs
    path: mta-ztransport-appointment-approuter
    parameters:
      disk-quota: 256M
      memory: 128M
    requires:
      - name: mta_ztransport_appointment_html5_repo_runtime
      - name: uaa_mta_ztransport_appointment
      - name: portal_resources_mta_ztransport_appointment
      - name: dest_mta_ztransport_appointment
      - name: conn_mta_ztransport_appointment
  - name: mta_ztransport_appointment_ui_deployer
    type: com.sap.html5.application-content
    path: mta_ztransport_appointment_ui_deployer
    requires:
      - name: mta_ztransport_appointment_html5_repo_host
    build-parameters:
      requires:
        - name: ztransport.appointment
          artifacts:
            - './*'
          target-path: resources/ztransport.appointment
  - name: ztransport.appointment
    type: html5
    path: ztransport.appointment
    build-parameters:
      builder: custom
      commands:
        - npm install
        - npm run build
      supported-platforms: []
      build-result: dist
  - name: flp
    type: com.sap.portal.content
    path: flp
    parameters:
      stack: cflinuxfs3
      memory: 128M
      buildpack: 'https://github.com/cloudfoundry/nodejs-buildpack/releases/download/v1.6.39/nodejs-buildpack-cflinuxfs3-v1.6.39.zip'
    requires:
      - name: portal_resources_mta_ztransport_appointment
      - name: uaa_mta_ztransport_appointment
      - name: mta_ztransport_appointment_html5_repo_host
      - name: mta_ztransport_appointment_ui_deployer

  

resources:
  - name: mta_ztransport_appointment_html5_repo_runtime
    parameters:
      service-plan: app-runtime
      service: html5-apps-repo
    type: org.cloudfoundry.managed-service
  - name: mta_ztransport_appointment_html5_repo_host
    parameters:
      service-plan: app-host
      service: html5-apps-repo
    type: org.cloudfoundry.managed-service
  - name: uaa_mta_ztransport_appointment
    parameters:
      path: ./xs-security.json
      service-plan: application
      service: xsuaa
    type: org.cloudfoundry.managed-service
  - name: dest_mta_ztransport_appointment
    parameters:
      service-plan: lite
      service: destination
    type: org.cloudfoundry.managed-service
  - name: portal_resources_mta_ztransport_appointment
    parameters:
      service-plan: standard
      service: portal
    type: org.cloudfoundry.managed-service
  - name: conn_mta_ztransport_appointment
    parameters:
      service-plan: lite
      service: connectivity
    type: org.cloudfoundry.managed-service

Файл xs-security.json:

{
	"xsappname": "mta_ztransport_appointment",
	"tenant-mode": "dedicated",
	"description": "Security profile of called application",
	"scopes": [{
		"name": "$XSAPPNAME.Display",
		"description": "display"
	}, {
		"name": "$XSAPPNAME.Update",
		"description": "update"
	}, {
		"name": "uaa.user",
		"description": "UAA"
	}],
	"role-templates": [{
		"name": "Token_Exchange",
		"description": "UAA",
		"scope-references": [
			"uaa.user"
		]
	}, {
		"name": "Viewer",
		"description": "View Users",
		"scope-references": [
			"$XSAPPNAME.Display"
		]
	}, {
		"name": "Manager",
		"description": "Maintain Users",
		"scope-references": [
			"$XSAPPNAME.Display",
			"$XSAPPNAME.Update"
		]
	}]
}

xs-app.json в папке approuter:

{
  "welcomeFile": "/cp.portal",
  "authenticationMethod": "route",
  "logout": {
    "logoutEndpoint": "/do/logout"
  },
  "routes": [
    {
      "source": "^/Dirickx_DE1/(.*)$",
      "target": "$1",
      "authenticationType": "none",
      "destination": "Dirickx_DE1",
      "csrfProtection": false
    },
    {
      "source": "^(.*)$",
      "target": "$1",
      "service": "html5-apps-repo-rt",
      "authenticationType": "xsuaa"
    }
  ]
}

Совершенно такой же approuter-start.js, как и блог, помещенный в папку approuter.

var approuter = require('@sap/approuter');
var ar = approuter();
ar.beforeRequestHandler.use('/getuserinfo', function (req, res, next) {
	if (!req.user) {
		res.statusCode = 403;
		res.end("Missing JWT Token");
	} else {
		res.statusCode = 200;
		res.end("My name is ${JSON.stringify(req.user.name, null, 2)}");
	}
});
ar.start();

И package.json в папке approuter следующим образом:

{
	"name": "html5-apps-approuter",
	"description": "Node.js based application router service for html5-apps",
	"engines": {
		"node": "^8.0.0 || ^10.0.0"
	},
	"dependencies": {
		"@sap/approuter": "6.8.0"
	},
	"scripts": {
		"start": "node ./approuter-start.js"
	}
}

Мой файл xs-app.json отличается от файла в блоге, и я думаю, что ошибка возникает из-за него, но если я придерживаюсь блога, развертывание не выполняется. И с тем, который я использую, развертывание работает, но запрос не выполняется.

Есть идеи? Спасибо


person LnC    schedule 10.06.2020    source источник


Ответы (1)


Упомянутый вами блог создает определенный маршрут в approuter /getuserinfo, поэтому, когда вы развертываете approuter и переходите к https://<app_router_domain_from_SCP>.hana.ondemand.com/getuserinfo, он декодирует токен JWT, который вы получили при входе в систему, и возвращает детали.

Вам нужно сделать запрос самостоятельно, чтобы получить данные.

Если вы хотите использовать данные в приложении UI5, я бы просто заставил обработчик /getuserinfo возвращать данные в формате JSON и использовать JSONModel для этого URL-адреса. Затем вы можете выполнить привязку к новой модели, как и к любой другой модели.

Надеюсь это поможет!

person orogers    schedule 18.06.2020
comment
Здравствуйте, спасибо за ваш ответ! Я делал вызов ajax, чтобы получить его, но я не работал. Благодаря этому я нашел другой способ сделать это: зарегистрированная информация о пользователе из веб-приложения облачного литейного производства"> stackoverflow.com/questions/52296127/ - person LnC; 19.06.2020