在我的UI5应用程序中,我必须确保如果用户关闭选项卡,然后打开一个新选项卡并将直接链接粘贴到那里的内部页面,应用程序将他路由到登录页面。
这是一个例子:
https://myapp/#/productsList
https://myapp.com
我实现了以下路由逻辑:
"routes": [{
"pattern": "",
"name": "login",
"target": "login"
},…]
…
"targets": {
"login": {
"viewID": "login",
"viewName": "Login"
},…
}
如何使用原生UI5工具实现此类行为?
我认为这不能通过配置Manifest.json中的路由来实现。通常,用户的登录和授权应由服务器本身处理:例如Apache,Tomcat或Nginx,或任何其他OpenID或OAuth解决方案。例如,Nginx documentation。
回到你的问题,一个简单的解决方案,用于检查用户是否已经/已经看过登录页面。我会以下面的方式实现它。
在Components.js中注册一个模型loginModel
:
let oLoginModel = new JSONModel({
bUserLoggedIn = false;
});
this.setModel(oLoginModel, "loginModel");
如果用户已看到/通过了您的登录页面,请将该属性设置为true
。
在Manifest.json中定义其他路由。在视图的控制器中,在onInit
中附加一个侦听器,并检查用户是否已看到登录页面,如果没有直接导航到登录页面:
onInit: function() {
this.getRouter().getRoute("sampleRoute")
.attachPatternMatched(this._onRouteMatched, this);
},
_onRouteMatched: function(oEvent) {
if (!this.getModel("loginModel").getProperty("/bUserLoggedIn")) {
let oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("login");
}
},
希望有所帮助。