У меня есть приложение с угловым 2 с аутентификацией JWT (Auth0), которое после входа пользователя сохраняет идентификатор профиля и токена в localStorage, профиль содержит атрибут «role», чтобы проверить, может получить доступ к специальной странице. Все работает как шарм, но если пользователь меняет свойство role в localStorage на «admin», например, и перезагружает приложение, он может получить доступ к страницам, на которые он не авторизован. Как я могу справиться с этим?Аутентификация с угловым 2 и JWT (Auth0)
auth.service.ts:
declare var Auth0Lock: any;
@Injectable()
export Class AuthService {
lock = new Auth0Lock(ID, domain);
user: Object;
constructor() {
this.user = JSON.parse(localStorage.getItem('profile'));
}
public login() {
// Auth0 method
this.lock.show({}, (err: string, profile: Object, token: string) => {
if (err) { console.log(err); return; }
localStorage.setItem('profile', JSON.stringify(profile));
localStorage.setItem('id_token', token);
});
}
public logout() {
localStorage.removeItem('profile');
localStorage.removeItem('id_token');
}
public loggedIn() {
return tokenNotExpired();
}
public isAdmin() {
if (this.user['role'] == 'admin') {
return true;
} else {
return false;
}
}
}
app.component.ts:
// imports, etc
export Class AppComponent {
constructor(private auth: AuthService) {}
}
app.component.html:
<nav>
<ul>
<li><a [routerLink]="['Customers']" *ngIf="auth.loggedIn()">Customers</a></li>
<li><a [routerLink]="['Admin']" *ngIf="auth.loggedIn() && auth.isAdmin()">Admin</a></li>
</ul>
</nav>
Любые идеи для обработки это будет appre ciated
Вы также можете добавить фильтры в вашей апи реагировать 401/403 статус для каждого неавторизованных запросов. Затем на стороне клиента выслушайте ошибки '401' и' 403' http для большей безопасности. Посмотрите мою статью о том, как это сделать - http://www.adonespitogo.com/articles/angular-2-extending-http-provider/ –