2016-10-21 4 views
-1

처음에는 나쁜 언어로 죄송합니다. 독일 학생.Angular2 : 사용자 서비스 재설정

저는 Angular에서 사용자 서비스를 구현했습니다. 2 불행히도 로그인은 부분적으로 만 작동합니다. 사용자가 로그인 화면을 통과하고 주소 표시 줄에서 링크를 수동으로 호출하면 e. 지. URL/채팅을하면 사용자 서비스가 재설정됩니다. 사용자는 더 이상 권한이없고 로그인하지 않았습니다.

서비스를 개선하려면 어떻게해야합니까? 귀하의 답변

감사합니다 :)

로그인 구성 요소

@Component({ 
    selector: 'login-form', 
    templateUrl: 'login.component.html', 
    styleUrls: ['login.component.scss'] 
    }) 
    export class LoginComponent { 
    error:string; 
    model = new User("", ""); 

    constructor(private userService: UserService, 
       private router: Router, 
       private ErrorHandler:ErrorHandlingService) { 
    } 
    onSubmit() { 
     this.userService.login(this.model.email, this.model.password).subscribe(
      (result) => { 
       if (result) { 
        this.router.navigate(['dashboard']); 
       } 
      }, 
      (error) => { 
       error = this.ErrorHandler.convertMessage(error); 
       this.error = this.ErrorHandler.getUserError(error); 
      } 
      ); 
    } 
    } 

사용자 서비스

import { Injectable } from '@angular/core'; 
    import { Http, Headers } from '@angular/http'; 
    import 'rxjs/add/operator/map'; 
    import {MiaIP} from './miacontroller.service'; 

    @Injectable() 
    export class UserService { 
    private loggedIn = false; 
    private user ={ 
    "event": "", 
    "data": { 
    "firstname": "", 
    "lastname": "", 
    "token": "", 
    "privileges": [] 
    } 
    }; 

    constructor(private http: Http) { 
     this.loggedIn = !!sessionStorage.getItem('auth_token'); 
    } 
    login(email, password) { 
     let headers = new Headers(); 
     headers.append('Content-Type', 'application/json'); 

     return this.http 
      .post(MiaIP.MIA_ENDPOINT, JSON.stringify({ email, password }), { headers: headers }) 
      .map(res => res.json()) 
      .map((res) => { 
       if (!!res.event) { 
        sessionStorage.setItem('auth_token', res.data.token); 
        this.loggedIn = true; 
        this.user.data.privileges = res.data.privileges; 
        this.user.event = res.event; 
        this.user.data.firstname =res.data.firstname; 
        this.user.data.lastname =res.data.lastname; 
        this.user.data.token = res.data.token; 
        console.log('chat ist: ', this.user.data.privileges.indexOf('get_dashboard') >=1); 
       } 
       return !!res.event; 
      } 
      ); 
    } 

    logout() { 
    sessionStorage.removeItem('auth_token'); 
    this.loggedIn = false; 
    } 
    isLoggedIn() { 
     return this.loggedIn; 
    } 

    getUser(){ 
     return this.user; 
    } 

    getUsers(){ 
     return !!(this.user.data.privileges.indexOf('get_users') >=1) 
    } 
    getDashboard(){ 
     return !!(this.user.data.privileges.indexOf('get_dashboard') >=1) 
    } 
     getExperiment(){ 
     return !!(this.user.data.privileges.indexOf('get_experiment') >=1) 
    } 
     getChat(){ 
     return !!(this.user.data.privileges.indexOf('get_chat') >=1) 
    } 
     getOverview(){ 
     return !!(this.user.data.privileges.indexOf('get_overview') >=1) 
    } 
     getMyProfile(){ 
     return !!(this.user.data.privileges.indexOf('get_myprofile') >=1) 
    } 
     getScheduling(){ 
     return !!(this.user.data.privileges.indexOf('get_scheduling') >=1) 
    } 
    } 

채팅 구성 요소 사용자 히트가 주소 표시 줄에 입력 한

import { Component, OnInit } from '@angular/core'; 

    @Component({ 
    selector: 'chat', 
    templateUrl: 'chat.component.html', 
    styleUrls: ['chat.component.scss'] 
    }) 
    export class ChatComponent{ 
    } 

답변

2

나는 페이지 재로드가 시작되므로 모든 앱이 다시 초기화됩니다. (#has urls를 사용하면 예외가 될 수 있지만 그 방법은 사용하지 않습니다)

쿠키 또는 localstorage에 로그인 정보를 저장하려고합니다. Angular2와 정확히 관련이 없습니다.

관련 문제