2017-03-24 53 views
0

我在本地主機上有一個rails BE應用程序:3000和localhost:4200上的FE。我試圖讓標記驗證自動完成,我明白這是通過在_tokenService.validateToken()方法中設置和檢索localStorage來實現的。爲什麼當我在_tokenService.init()上設置apiBase時,Angular2 token localStorage沒有設置?

這個問題似乎是,一旦我登錄(成功),我在我的瀏覽器中查看我的localStorage,發現沒有保存。因此,當我刷新頁面時,不存在localStorage作爲我的validateToken()方法的一部分進行驗證,因此會話不在瀏覽器中維護。

我在這裏錯過了什麼?我已經初始化這個命令的方式有錯嗎?我是否需要每次手動設置localStorage?如果是這樣,怎麼樣?

app.component.ts

import { Component, ViewEncapsulation, OnInit } from '@angular/core'; 
import { Angular2TokenService } from 'angular2-token'; 
@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.scss'], 
    encapsulation: ViewEncapsulation.None 
}) 
export class AppComponent { 
    constructor(private _tokenService: Angular2TokenService) { 
     this._tokenService.init({apiBase:'http://localhost:3000'}); 
    } 
} 

登錄in.component.ts

import { Component, OnInit } from '@angular/core'; 
import { Angular2TokenService, SignInData } from 'angular2-token'; 

@Component({ 
    selector: 'sign-in', 
    templateUrl: 'sign-in.component.html' 
}) 
export class SignInComponent { 

    private _signInData: SignInData = <SignInData>{}; 
    private _output: any; 

    constructor(private _tokenService: Angular2TokenService) { } 

    // Submit Data to Backend 
    onSubmit() { 

     this._output = null; 

     this._tokenService.signIn(this._signInData).subscribe(
      res => { 
       this._signInData = <SignInData>{}; 
       this._output  = res; 
      }, error => { 
       this._signInData = <SignInData>{}; 
       this._output  = error; 
      } 
     ); 
    } 
} 

回答

0

經過一番搜索和反覆試驗,解決辦法是設置特定路由的代理。這可以通過在你的角度應用程序的根目錄

proxy.config.json

{ 
    "/auth": { 
    "target": "http://localhost:3000", 
    "secure": false 
    } 
} 

加入以下文件來完成包括這在你的

包。 json

{ 
.. 
.. 
    "scripts": { 
    ... 
    ... 
    "start": "ng serve --proxy-config proxy.conf.json", 
    ... 
    ... 
    } 
.. 
.. 
} 

這個問題根本上是發並沒有獲得分配給我的瀏覽器的響應報頭的localStorage通過以下命令

this._tokenService.init({apiBase:'http://localhost:3000'}); 

改變了這一回

this._tokenService.init(); 

,而是路由通過/ AUTH所有要求默認路由在angular2-token中通過代理請求設置到相應的rails路由。

相關問題