带有和不带有身份验证的CAP路由

2020-08-21 23:09发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我的CAP项目有一个公共部门和一个后台办公室。 我想通过XSUAA通过身份验证来保护后台应用程序,但不通过身份验证即可保持前端打开。

我试图像这样在xs-app.json中实现它:

 {
     " welcomeFile":"/img/customer",
     " authenticationMethod":"路由",
     "路线":[{
         " source":" ^/admin/(.*)$",
         " target":" $ 1",
         " localDir":" admin/webapp/",
         " authenticationType":" xsuaa"
     },{
         " source":" ^/customer/(.*)$",
         " authenticationType":"无",
         " csrfProtection":否,
         " target":" $ 1",
         " localDir":"客户"
     }]
 }
 

但是,这似乎不起作用。 对localhost:5000上的approuter的任何访问都将通过UAA路由到登录名。 如果我直接通过转到localhost:5000/customer/来访问客户路由,则看来approuter仍然希望进行类似登录的操作,因为我在approuter日志中收到以下异常,并且浏览器请求超时:

(节点:21017)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性"令牌"
     在/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/approuter.js:6:33
     通话时(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:239:7)
     在下一个(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:183:5)
     压缩时(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/compression/index.js:220:5)
     通话时(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:239:7)
     在下一个(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:183:5)
     在module.exports(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/@sap/approuter/lib/middleware/logout-middleware.js:14:3)
     通话时(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:239:7)
     在下一个(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:183:5)
     在cacheRequestData(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/@sap/approuter/lib/middleware/cache-request-middleware.js:9:12)
 (节点:21017)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。 该错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了.catch()未处理的承诺而导致的。  (拒绝ID:1)
 (节点:21017)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。 将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。
 

如何使/customer/路线可公开访问,并在不登录的情况下将访问者发送到/到此路线?

最诚挚的问候,

Manuel

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我的CAP项目有一个公共部门和一个后台办公室。 我想通过XSUAA通过身份验证来保护后台应用程序,但不通过身份验证即可保持前端打开。

我试图像这样在xs-app.json中实现它:

 {
     " welcomeFile":"/img/customer",
     " authenticationMethod":"路由",
     "路线":[{
         " source":" ^/admin/(.*)$",
         " target":" $ 1",
         " localDir":" admin/webapp/",
         " authenticationType":" xsuaa"
     },{
         " source":" ^/customer/(.*)$",
         " authenticationType":"无",
         " csrfProtection":否,
         " target":" $ 1",
         " localDir":"客户"
     }]
 }
 

但是,这似乎不起作用。 对localhost:5000上的approuter的任何访问都将通过UAA路由到登录名。 如果我直接通过转到localhost:5000/customer/来访问客户路由,则看来approuter仍然希望进行类似登录的操作,因为我在approuter日志中收到以下异常,并且浏览器请求超时:

(节点:21017)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性"令牌"
     在/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/approuter.js:6:33
     通话时(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:239:7)
     在下一个(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:183:5)
     压缩时(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/compression/index.js:220:5)
     通话时(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:239:7)
     在下一个(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:183:5)
     在module.exports(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/@sap/approuter/lib/middleware/logout-middleware.js:14:3)
     通话时(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:239:7)
     在下一个(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/connect/index.js:183:5)
     在cacheRequestData(/Users/manuels/Documents/ccscp/cap_demo/maikeyserver/app/node_modules/@sap/approuter/lib/middleware/cache-request-middleware.js:9:12)
 (节点:21017)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。 该错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了.catch()未处理的承诺而导致的。  (拒绝ID:1)
 (节点:21017)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。 将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。
 

如何使/customer/路线可公开访问,并在不登录的情况下将访问者发送到/到此路线?

最诚挚的问候,

Manuel

付费偷看设置
发送
3条回答
太Q了
1楼 · 2020-08-22 00:01.采纳回答

发现了问题。 我已经将JWT令牌记录器内置到approuter中,这导致了异常。 现在完全有意义了...

无论如何,更改代码可修复异常:

 const approuter = require(" @ sap/approuter");
 const jwtDecode = require(" jwt-decode");
 const ar = approuter();

 ar.beforeRequestHandler.use(async(req,res,next)=> {
     如果(typeof req.user!=='undefined'){
         const jwt = jwtDecode(req.user.token.accessToken);
         console.log(jwt);
     }
     下一个();
 });

 ar.start();
 
黑丝骑士
2楼-- · 2020-08-21 23:35

嗨,格雷格,

谢谢。 这就是我所拥有的,但似乎不起作用。 如果我直接访问该路由,我将从上面得到例外。

最诚挚的问候,

Manuel

SC_Yao
3楼-- · 2020-08-21 23:47

嗨曼努埃尔,

请查看 approuter文档,请尝试在您的客户路线中添加:

" authenticationType":"无" 

最诚挚的问候
格雷戈尔

一周热门 更多>