正如标题所说,我正试图从Cloud Foundry的FLP中的一个应用程序中检索用户信息。
我关注了以下博客。https:/blogs.sap.com20190523如何获取已登录用户的邮件--云端铸造厂的邮件。
但是我的应用结构不一样,我不知道如何让它发挥作用。
首先,我可以把项目创建总结为这两个环节。
这是我的应用程序的结构。
与相关的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"
]
}]
}
approuter文件夹中的xs-app.json。
{
"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文件夹里的approuter-start.js。
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();
而approuter文件夹中的package.json如下。
{
"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文件和博客上的不一样,我认为错误来自于它,但如果我坚持使用博客,部署就会失败.而我使用的那个文件,部署成功了,但请求没有发出。
有什么办法吗?
你所提到的博客在approuter中创建了一个特定的路由。/getuserinfo
这样,当你部署approuter并进入到 https://<app_router_domain_from_SCP>.hana.ondemand.com/getuserinfo
它解读你从登录中得到的JWT令牌,并返回详细信息。
你需要自己提出请求才能获得数据。
如果你想在UI5应用中使用这些数据,我就会直接把 /getuserinfo
处理程序以JSON格式返回数据,并在该URL上使用JSONModel。然后您可以像绑定其他模型一样绑定到新模型上。
希望对大家有所帮助!