Gpa*_*ack 8 aurelia aurelia-navigation
我正在尝试开发一个网站,其中导航栏项目取决于登录用户的角色.
正如Patrick Walter在他的博客上建议的那样,我正在考虑创建一个session.js文件,在那里我将存储有关当前用户的信息:他们的用户名和角色.然后我会在nav-bar.js中注入此文件,并为路由创建一个过滤器,用户无权访问.一切正常,直到我点击刷新按钮...事实上,它创建了一个新的会话对象,我松开了前一个中的所有信息存储.
我在文档中看到了单例方法,但我不确定如何使用它.如果我将它插入我的代码中,如下所示,我收到消息:aurelia.use.singleton is not a function.
import config from './auth-config';
export function configure(aurelia) {
console.log('Hello from animation-main config');
aurelia.use
.singleton(Session)
.standardConfiguration()
.developmentLogging()
.plugin('aurelia-animator-css')
.plugin('paulvanbladel/aurelia-auth', (baseConfig) => {
baseConfig.configure(config);
});
aurelia.start().then(a => a.setRoot());
}
export class Session {
username = '';
role = '';
reset() {
console.log('Resetting session');
this.username = '';
this.role = '';
};
}
Run Code Online (Sandbox Code Playgroud)
我的最后一个想法是加密角色/用户名并使用浏览器的会话来存储信息.但我想向更有经验的开发人员询问他们对该主题的看法.
谢谢你的帮助!
编辑:这是我的session.js代码
export class Session {
username = '';
role = '';
reset() {
console.log('Resetting session');
this.username = '';
this.role = '';
};
}
Run Code Online (Sandbox Code Playgroud)
这就是我注入它的方式:
import {Session} from './services/session';
@inject(Session)
export class RoleFilterValueConverter {
constructor(session) {
console.log('Hello from RoleFilter constructor', session)
this.session = session;
};
toView(routes, role) {
console.log('Hello from view', role, this.session)
if (this.session.role == 'Superuser')
return routes;
return routes.filter(r => {
var res = !r.config.role || (r.config.role == this.session.role);
return res
});
}
}
Run Code Online (Sandbox Code Playgroud)
在主入口点(让我们假设它index.html)你应该有这样的东西:
<body aurelia-app="path/to/main">
<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script>
System.import('aurelia-bootstrapper');
</script>
</body>
Run Code Online (Sandbox Code Playgroud)
这会导入整个aurelia环境,因此当它到达时export function configure(aurelia) { ... }它应该传递一个类型的实例Aurelia并将其绑定到aurelia参数并应解决您的aurelia.use.singleton is not a function.错误.之后,在您session.js使用@inject(Session)它的文件中应传递您在启动时声明的相同实例.
我还实现了一个单例会话对象来存储用户数据,并选择了这种方法,因为依赖依赖注入更方便,而不是总是调用一个方法来从cookie中获取用户数据.
| 归档时间: |
|
| 查看次数: |
2567 次 |
| 最近记录: |