我试图开发一个网站,其中导航栏项目取决于用户的角色,谁是登录。
正如Patrick在他的博客上建议的那样,我正在考虑创建一个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 = '';
};
}我的最后一个想法是加密角色/用户名,并使用浏览器的会话来存储信息。但是我想向更有经验的开发人员询问他们对这个话题的看法。
谢谢你的帮忙!
编辑:这里是我的session.js代码
export class Session {
username = '';
role = '';
reset() {
console.log('Resetting session');
this.username = '';
this.role = '';
};
}我就是这样注射的:
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
});
}
}发布于 2015-08-21 00:59:27
在主入口点(假设它是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>这将导入整个aurelia环境,因此当它到达export function configure(aurelia) { ... }时,它应该传递一个Aurelia类型的实例,并将其绑定到aurelia参数,并解决您的aurelia.use.singleton is not a function.错误。之后,在您的session.js文件中,当使用@inject(Session)时,它应该传递在启动时声明的相同实例。
我还实现了一个单例会话对象来存储用户数据,并选择了这种方法,因为依赖注入比调用方法从cookie中获取用户数据更方便。
发布于 2015-09-22 16:45:50
尽管Laurentiu的回答不错,但是有更好的方法可以解决这个问题,这不会增加应用程序的复杂性。
您不需要将此指定为单例。这个特定的函数更适合边缘情况,在启动之前,您希望将特定项作为单例公开给依赖项注入容器。
事实上,-- Aurelia依赖注入框架--除非另有规定,否则将所有模块视为单例。因此,如果没有配置函数,代码就应该像您在这里编写的那样工作。
我写了一个深入的博客,你可以在这里找到有帮助的:http://davismj.me/blog/aurelia-auth-pt2/
https://stackoverflow.com/questions/32085649
复制相似问题