我有一个Angular 4应用程序依赖于使用我用于获取信息的参数(即drop table t1 purge;
drop table t2 purge;
/project/:id
的路由问题是这不安全,因为任何用户都可以猜出这个数字我正在采取预防措施,在后端验证请求它的人是被检索数据的所有者。
由于我正在检查后端,用户仍然可以输入/project/1
,如果该项目不属于他们,则不会返回任何数据,但用户仍会看到HTML页面。
我曾考虑使用会话存储来存储project/310
而不是组件检查,看看它是否存在,如果不是重定向。
如果有人有更好/更有效的方法来做到这一点,我将不胜感激。
答案 0 :(得分:2)
您需要 Route Guard
i_ = 'd'
myList = ['a','b','c','d','e']
random.sample(random.sample(myList[:myList.index(i_)] +
myList[(myList.index(i_) + 1):],
2)
+ [i_], k=3)
['c', 'd', 'b']
在您的路由中,添加此
import { AngularFireAuth } from 'angularfire2/auth';
import { Injectable } from '@angular/core';
import { Router, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivate } from '@angular/router';
@Injectable()
export class AuthGuard implements CanActivate {
loggedIn = false;
constructor(private dummyService: DummyService, private router: Router) {
}
canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
//To get the data in the url for instance,'product/1'
const productId = route.params.id;
//here get the data and do the necessary logic
return this.dummyService.SomeFunction
.map( authState => !!authState) need to return a boolean
.do( auth => {
//user is not the owner of the data so redirect them somewhere else
if (!auth) {
this.router.navigate(['/login']);
}
//if you got here, then the user is the owner of the data.
}).take(1);
}
}
在app.module中的提供程序中添加 {
path: 'product/:id',
component: SomeComponent,
canActivate: [AuthGuard ]
}
。
更多信息:
CanActivate - https://angular.io/api/router/CanActivate