2016-10-21 10 views
-1

最初、私の悪い言い訳に申し訳ありません。私はドイツの学生です。Angular2:ユーザーサービスのリセット

私はAngularでユーザーサービスを実装しました。 2残念ながら、ログインは部分的にしか動作しません。ユーザーがログイン画面を通過し、アドレスバーのリンクを手動で呼び出した場合e。 g。 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のURLを使用するといくつかの例外が発生することがありますが、その方法はありません)

おそらくログイン情報をCookieまたはlocalstorageに保存することをお勧めします。 Angular2には正確には関係しません。

関連する問題