angular 6 tip 01

angular 로그인후 페이지 이동

모든 페이지에서 로그인으로 이동을 하게 되면 이동전 url 을 local storage 에 저장해둔다.

기존 코드

import { Injectable } from "@angular/core";
import { CanActivate, Router } from "@angular/router";
import { OpenIdConnectService } from "./open-id-connect.service";

@Injectable()
export class RequireAuthenticatedUserRouteGuard implements CanActivate {
  constructor(private openIdConnectService: OpenIdConnectService, private router: Router) {}

  canActivate() {
    if (this.openIdConnectService.userAvailable) {
      return true;
    } else {
      // trigger signin
      this.openIdConnectService.triggerSignIn();
      return false;
    }
  }
}

변경후

canActivate(route, state: RouterStateSnapshot) {
    if (this.openIdConnectService.userAvailable) {
      return true;
    } else {
      //save previous url
      let returnUrl = state.url;
      localStorage.setItem("returnUrl", returnUrl);

      // trigger signin
      this.openIdConnectService.triggerSignIn();
      return false;
    }
  }

RouterStateSnapshot 을 이용해서 바로전 url 을 읽어오는것이 포인트

이제 로그인후 이걸 읽어서 리다이렉트해주면된다.

constructor(){...}

handleCallback() {
  this.userManager.signinRedirectCallback().then(function (user) {
    if (!environment.production) {
    console.log('Callback after signin handled.', user);
    }
});
}
constructor(private router: Router){...}

handleCallback() {
this.userManager.signinRedirectCallback().then(user => { //function (user)면 에러남 꼭 => { 로 해야함.
    if (!environment.production) {
    console.log("Callback after signin handled.", user);
    }

    let returnUrl = localStorage.getItem("returnUrl");
    console.log("returnUrl#####", returnUrl);
    this.router.navigateByUrl(returnUrl);
});
}

ctrl + enter 치면 서브밋하기

<post-form-content-editor (keydown.enter)="ctrlEnterPress()"></post-form-content-editor> //enter에서 동작
<post-form-content-editor (keydown.control.enter)="ctrlEnterPress()"></post-form-content-editor> //control enter 동시에 치면 동작
ctrlEnterPress() {
    this.submit();
    console.log("ctrl enter");
}

개선하자. ctrlEnterPress 가 구지 필요없다. 바로 호출하면 ctrlEnterPress를 삭제가능하다.

<post-form-content-editor (keydown.control.enter)="submit()"></post-form-content-editor> //control enter 동시에 치면 동작

todo

리프레시할때 토큰을 다시 받아오는건 왜?

teamsmiley's profile image

teamsmiley

2018-06-04 00:00

Read more posts by this author