2016-04-10 12 views
2

は私が Angular2 +ウェブAPI +トークンベースの認証

Angular2

を学ぶことを試みていると私は認証付きのシンプルなブログを作成しようとしています。

これはここで私の追加新しく投稿する方法である:

[Authorize] 
    // POST: api/Post 
    public PostModel Post([FromBody]PostViewModel model) 
    {    
     var post = new PostModel 
     { 
      Body = model.Body, 
      Title = model.Title, 
      AuthorId = IdentityExtensions.GetUserId(User.Identity), 
     }; 
     var res = blogRepo.AddPost(post); 
     return res;     
    } 

すべてがうまく動作しますが、アプリが起動してから、ユーザが、最初にログインしているユーザーの最新のIdentityExtension.GetUserId()返しません。

基本的に私は(クライアント側がlocalStorage.removeItem("jwt");の単純な除去である)現在のユーザーがサーバー上だけでなく、クライアント上でログアウトしていることを確認する方法を探しています

もあります私がやっていることはまったく間違っていますが、このコントローラのApplicationUserManagerにアクセスすることはできません。

+0

どのようにしてAngular2アプリケーション内で認証ヒントを送信しますか?ありがとう! –

+0

私は角型アプリで2つのヘッダーを作成しました.1つは通常の呼び出し用で、もう1つはこのような認証された呼び出し用で、基本的にはユーザーがログインするときにlocalStorageにアクセストークンを格納し、ユーザがログアウトして新しいユーザがログインするが、サーバはログインしないときにトークンが変更される – shaahin

+0

'IdentityExtensions.GetUserId(User.Identity)'はある種のキャッシュを使用していますか?ログインした最初のユーザが常に返ってくるのは奇妙に思えます。どのように 'User.Identity'パラメータを使用していますか? – Brad

答えて

1

ok問題を見つけましたが、私はそれをまだ解決していませんでしたが、私はこれを更新します。問題は完全に私が尋ねたと思ったものすることが。

この問題は、Thierry Templierが提案したように、認証ヒントを送信することに関連しています。私はこのようなヘッダをエクスポートしたファイルがあります:

export const authHeaders = new Headers(); 
    authHeaders.append('Accept', 'application/json'); 
    authHeaders.append('Content-Type', 'application/json'); 
    authHeaders.append('Authorization', 'Bearer ' + localStorage.getItem('jwt')); 

をそして私は、私はそれを必要とする今までにこのヘッダーをインポートします。なぜ私はそれが常にキャッシュされた値(つまり、クライアントに格納された最初の値であり、私の質問にあるようにサーバー側とは何の関係もない)を送信する理由はわかりません。

この問題を解決するには、localstorageに保存されている最新のアクセストークンがサーバーに送信されていることを確認するだけです。

EDIT:今のところ私はコンストラクタで見出しを構成しています。