구성 요소를로드하기 전에 헤더에서 인증 토큰 가져 오기

만다 르 조 갈레 카르

저는 각도에 익숙하지 않고 코드 수정 작업을하고 있습니다.

현재 코드는 모든 구성 요소를 함께로드하는 기본 각도 방법으로 작동합니다. 즉, 여러 구성 요소가 함께 http 호출을 수행합니다.

내 Angular 앱은 Azure Portal에서 구성된 Azure 광고 인증을 사용하여 Azure 앱 서비스에서 호스팅됩니다.

첫 번째 시점부터 개선하고 확인하고 싶습니다. 먼저 구성 요소를로드하기 전에 http : //host/.auth/me url에서 id_token 매개 변수를 얻습니다. 이는 인증 토큰이 될 것입니다. (인증 헤더로이 인증 토큰은 백엔드에 대한 API 호출을 만드는 데 사용됨)

이 인증 토큰이 있으면 로컬 / 세션 저장소에 저장합니다. 이 과정이 완료되었을 때만 다른 각도 구성 요소의 로딩을 진행하고 싶습니다.

구성 요소의 지연로드에 대해 읽었습니다. 하지만 위의 시나리오를 수행하는 가장 좋은 방법이 무엇인지 알고 싶습니다.

피 에라

구성 요소에 대한 가시성 제한을 처리하는 방법에 대한 두 가지 아이디어가 있다고 생각합니다.

애플리케이션에서 auth.service.ts에서 로그인 및 기타 인증을 처리 할 수 ​​있습니다.

// auth.service.ts
@Injectable({
  providedIn: 'root'
})
export class AuthService {
private token: string;
private loggedIn = false;

constructor(private http: HttpClient) {}


getLoggedIn() {
  return this.loggedIn;
}

login(email:string, password:string): Promise <string> {
  const promise = new Promise < string > ((resolve, reject) => {
    const authData = { email: email, password: password }
      this.http.post < { token: string } > (environment.backendUrl + '/api/user/login', authData).toPromise()
      .then(response => {
         const token = response.token;
         this.token = token;
         if (token) {
           this.loggedIn = true;
         }
}

위의 스 니펫에서 볼 수 있듯이 로그인이 성공하면 응답 본문에 토큰이 수신됩니다.이 토큰은 애플리케이션에서 토큰을 얻는 방법과 비슷합니다. 그런 다음이 response.token을 auth.service.ts 파일 내의 토큰 변수에 할당합니다. 토큰이 auth.service.ts 파일 내의 변수에 할당 된 후에는 auth.service.ts 파일을 가져 와서 애플리케이션의 어느 곳에서나 getLoggedIn () 함수를 호출하여 토큰을 읽고 확인할 수 있습니다.

이제 토큰을 확인하여 구성 요소의 가시성을 제한하는 방법으로 돌아갑니다. 한 가지 방법은 auth.service.ts 파일을 다음과 같이 생성자에 추가하여 구성 요소 가시성을 제한하려는 구성 요소로 가져올 수 있습니다.

// .ts file where you want to restrict visibility
export class component {
loggedIn = false;

constructor(private authService: AuthService) {}

ngOnInit() {
   this.loggedIn = this.authService.getLoggedIn();
}

ngOnInit 호출 중에 구성 요소가 토큰을 확인하는 것을 볼 수 있습니다. 이는 해당 html 파일에서이 logsin 변수를 * ngIf와 함께 사용하여 특정 html 요소 또는 원하는 경우 전체 구성 요소의 가시성을 제한 할 수 있음을 의미합니다.

// .html file
<div *ngIf=loggedIn>
   <h1> title </h1>
   <p> here you be your text </p>
</div>

또 다른 방법은 mikhail과 gytis가 이전에 언급했듯이 경비를 구현하는 것입니다. 이 가드는 페이지로 라우팅하기 전에 토큰을 확인하여 로그인 한 사용자 만 특정 페이지를 방문 할 수 있는지 확인합니다. 다음과 같이 auth.guard.ts 파일을 추가하여이를 수행 할 수 있습니다.

@Injectable()
export class AuthGuard implements CanActivate {

  constructor(private authService: AuthService, private router: Router) {}

  canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): boolean | Observable < boolean > | Promise < boolean > {
    const loggedIn = this.authService.getLoggedIn();
    if (!loggedIn) {
      this.router.navigate(['/login']);
    }
    return loggedIn;
  }

}

이 파일을 추가하면 app-routing.ts 파일에서 다음과 같이 tokencheck를 활성화 할 수 있습니다.

// app-routing.ts file
const routes: Routes = [
    { path: "", component: HomePageComponent },
    { path: "home", component: HomePageComponent },
    { path: "login", component: LoginPageComponent },
    { path: "signup", component: SignupPageComponent },
    { path: "profile/:id", component: ProfilePageComponent, canActivate: [AuthGuard] },

]

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule],
    providers: [AuthGuard]
})
export class AppRoutingModule {}

스니핑 된 프로필 페이지는 AuthGuard에 의해 보호되므로 로그인 한 사용자 만이 페이지를 방문 할 수 있습니다. 사용자가 AuthGuard에 로그인되어 있지 않으면 사용자를 로그인 페이지로 리디렉션하므로 브라우저에 URL을 수동으로 입력하더라도 페이지를 방문하기 전에 로그인해야합니다.

나는 또한 아주 새로운 것이지만 나는 당신에게 도움이 될 수 있기를 바라면서 당신을 위해 명확한 답변을 작성하기 위해 최선을 다했습니다! :) 좋은 하루 되세요!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Authorization HTTP 헤더에서 인증 토큰 값 가져 오기

분류에서Dev

AFNetworking Swift의 헤더 응답에서 토큰 값 가져 오기

분류에서Dev

웹 API에서 인증 된 사용자 이름을 가져 오는 방법 (토큰 기반 인증)

분류에서Dev

URL에서 토큰 가져 오기

분류에서Dev

"Here"REST API에서 토큰을 가져 오려고 할 때 잘못된 클라이언트 인증 헤더

분류에서Dev

Azure AD B2C에서 새 액세스 토큰 가져 오기를 테스트하도록 Postman 구성

분류에서Dev

다른 구성 요소에서 인수 가져 오기 [React JS]

분류에서Dev

Vue 구성 요소에서 jquery 플러그인 가져 오기

분류에서Dev

getChildContext ()를 reactjs 상위 구성 요소에 전달하면 webpack에서 예기치 않은 토큰 오류가 발생합니다.

분류에서Dev

헤더를 추가하기 위해 생성 된 프록시 클래스에 전달자 토큰 전달

분류에서Dev

경로 전환에서 상태를 유지하기위한 불씨 구성 요소 가져 오기

분류에서Dev

Tomcat에서 인증서 가져 오기

분류에서Dev

NextJS : 하위 구성 요소에서 데이터 가져 오기 및 상위 구성 요소로 전달

분류에서Dev

인증서 : Firefox에서 내보내기, Windows 스토어로 가져 오기

분류에서Dev

개인 경로는 구성 요소를 렌더링하기 전에 인증을받습니다.

분류에서Dev

Swift에서 C 헤더 가져 오기

분류에서Dev

UserCredential을 가져 오려고 할 때 앱 기본 제공 C # WebBrowser 구성 요소에 인증 페이지 표시

분류에서Dev

노드에서 헤더 재전송 오류 가져 오기

분류에서Dev

Python : 문자열 인덱스에서 토큰 및 NER 태그 가져 오기

분류에서Dev

새로 고침 토큰에서 Paypal 액세스 토큰 가져 오기

분류에서Dev

Google 인증 토큰에서 Firebase 인증 만들기

분류에서Dev

Google 인증 토큰에서 Firebase 인증 만들기

분류에서Dev

블레이드에서 vue 구성 요소로 소품을 전달할 때 예기치 않은 토큰 '{'

분류에서Dev

Amplify 인증 자 가입 구성 요소에서 기본 국가 코드 설정

분류에서Dev

아키텍처 구성 요소 MVVM와 인증, 저장소에서 뷰 모델에 토큰 전달

분류에서Dev

코크 릿에서 사용자 세부 정보를 가져 오는 동안 인증 토큰 누락 오류

분류에서Dev

PayPal API 오류에서 액세스 토큰 가져 오기

분류에서Dev

ADAL : 특정 시스템에서 토큰 가져 오기 오류

분류에서Dev

부모의 가져 오기 호출에서 데이터가 전달되기 전에 React 자식 구성 요소가로드되지 않도록하는 방법

Related 관련 기사

  1. 1

    Authorization HTTP 헤더에서 인증 토큰 값 가져 오기

  2. 2

    AFNetworking Swift의 헤더 응답에서 토큰 값 가져 오기

  3. 3

    웹 API에서 인증 된 사용자 이름을 가져 오는 방법 (토큰 기반 인증)

  4. 4

    URL에서 토큰 가져 오기

  5. 5

    "Here"REST API에서 토큰을 가져 오려고 할 때 잘못된 클라이언트 인증 헤더

  6. 6

    Azure AD B2C에서 새 액세스 토큰 가져 오기를 테스트하도록 Postman 구성

  7. 7

    다른 구성 요소에서 인수 가져 오기 [React JS]

  8. 8

    Vue 구성 요소에서 jquery 플러그인 가져 오기

  9. 9

    getChildContext ()를 reactjs 상위 구성 요소에 전달하면 webpack에서 예기치 않은 토큰 오류가 발생합니다.

  10. 10

    헤더를 추가하기 위해 생성 된 프록시 클래스에 전달자 토큰 전달

  11. 11

    경로 전환에서 상태를 유지하기위한 불씨 구성 요소 가져 오기

  12. 12

    Tomcat에서 인증서 가져 오기

  13. 13

    NextJS : 하위 구성 요소에서 데이터 가져 오기 및 상위 구성 요소로 전달

  14. 14

    인증서 : Firefox에서 내보내기, Windows 스토어로 가져 오기

  15. 15

    개인 경로는 구성 요소를 렌더링하기 전에 인증을받습니다.

  16. 16

    Swift에서 C 헤더 가져 오기

  17. 17

    UserCredential을 가져 오려고 할 때 앱 기본 제공 C # WebBrowser 구성 요소에 인증 페이지 표시

  18. 18

    노드에서 헤더 재전송 오류 가져 오기

  19. 19

    Python : 문자열 인덱스에서 토큰 및 NER 태그 가져 오기

  20. 20

    새로 고침 토큰에서 Paypal 액세스 토큰 가져 오기

  21. 21

    Google 인증 토큰에서 Firebase 인증 만들기

  22. 22

    Google 인증 토큰에서 Firebase 인증 만들기

  23. 23

    블레이드에서 vue 구성 요소로 소품을 전달할 때 예기치 않은 토큰 '{'

  24. 24

    Amplify 인증 자 가입 구성 요소에서 기본 국가 코드 설정

  25. 25

    아키텍처 구성 요소 MVVM와 인증, 저장소에서 뷰 모델에 토큰 전달

  26. 26

    코크 릿에서 사용자 세부 정보를 가져 오는 동안 인증 토큰 누락 오류

  27. 27

    PayPal API 오류에서 액세스 토큰 가져 오기

  28. 28

    ADAL : 특정 시스템에서 토큰 가져 오기 오류

  29. 29

    부모의 가져 오기 호출에서 데이터가 전달되기 전에 React 자식 구성 요소가로드되지 않도록하는 방법

뜨겁다태그

보관