Я новичок в Angular и пытаюсь получить токены доступа и обновления из localStorage в http-перехватчике, но получаю следующую ошибку: Page /admin did not render in 30 seconds.
auth.interceptor.ts:
import { HttpInterceptorFn } from '@angular/common/http';
export const authInterceptor: HttpInterceptorFn = (req, next) => {
const accessToken = localStorage.getItem('access');
const refreshToken = localStorage.getItem('refresh');
return next(req);
};
профиль.компонент.ц:
import { Component, OnInit } from '@angular/core';
import { UserService } from '../../services/user.service';
import { ActivatedRoute } from '@angular/router';
import { Title } from '@angular/platform-browser';
import { User } from '../../models/user';
@Component({
selector: 'app-profile',
standalone: true,
imports: [],
templateUrl: './profile.component.html',
styleUrl: './profile.component.scss'
})
export class ProfileComponent implements OnInit {
user: User | null = null;
isFailed = false;
constructor(
private userService: UserService,
private route: ActivatedRoute,
private titleService: Title) { }
ngOnInit(): void {
this.route.paramMap.subscribe((paramMap) => {
const username = String(paramMap.get('username'));
this.userService.getUser(username).subscribe({
next: (user) => {
this.isFailed = false;
this.user = user;
this.titleService.setTitle(`${this.user.display_name || this.user.username} profile`);
},
error: () => {
this.isFailed = true;
}
});
});
}
}
Если я удалю функции localStorage.getItem(), ошибка исчезнет.
@MatthieuRiegler Значит, я не могу получить токены из localStorage в перехватчике?





Вы можете использовать localstorage внутри сети, как показано ниже. После следующего хука рендеринга ваш код будет выполнен после его отображения в браузере.
afterNextRender(() => {
localStorage.setItem('my-key', 'My value');
});
Если вы хотите использовать на стороне сервера, вам необходимо добавить полифилы, выполнив следующие шаги.
npm i localstorage-polyfill --save
Добавьте эти две строки в файл server.ts.
import 'localstorage-polyfill'
global['localStorage'] = localStorage
Затем вы можете использовать localstorage и внутри сервера.
Вероятно, вам не нужен предварительный рендеринг.
отключите его, удалив prerender: true со своего angular.json.
Вы не можете использовать
localStorage, если используете предварительный рендеринг.