2017-02-03 17 views

答えて

1

JWTを覚えていない方法は、クライアント側にそれを保存することではありません。認証でFeathersクライアントを使用している場合、トークンはfeathers-jwtとしてlocalStorageに格納されます。 、あなたは私を覚えてクリックした場合、私はどうすべきだと思うものです - この方法は、(潜在的なセキュリティ上の意味を持つ)ハックです:あなたは

localStorage.removeItem('feathers-jwt') 
+0

回答ありがとうございますが、サーバー側はどうですか?それはexpiresInトークンプロパティで行うことができます。私はちょうど私がアプリ全体の認証設定以外のどこにそれを設定することができます理解していないが、それは方法ではない。 – Alendorff

+0

サーバーにはJWTが格納されていないので、トークンが期限切れになっているかどうかを知る唯一の方法は、独自のトークンブラックリスト機能を実装することです。 feathers-authentication 1.0を使用すると、必要な場合は動的有効期限を設定できますが、ブラックリストなしでは有効期限前にトークンを無効にすることはできません。 – Daff

+0

@daffそして、そのコードがユーザが出発する前に実行できないのであれば?例えば。突然のブラウザクラッシュ - 覚えていないためにSessionStorageを使用し、覚えておくためにLocalStorageを使用することができます。私はそれが覚えている状態を格納するためにreduxを使用し、あなたが 'feathers.authentication'設定に渡すカスタムストレージからそれをアクセスすることによって実装できると思います。 (ブラウザの更新の間に状態が維持されなければならないことを覚えておいてください)これは私が実装を見ているところです。あなたがreduxのようなグローバルステートストアを持っていない場合、フックのいくつかの種類。 –

1

更新思考を呼び出すことにより、次のブラウザセッションのために、それは「unremember」缶有効期限が切れるか、存在しない場合は、新しいトークンを自動的に発行するために使用するリフレッシュトークンを発行する必要があります。私は羽毛の開発者が何を示唆しているのか聞いてみたいと思います。私はこれを見て、もっと良い解決策を見つけたら報告します。

ユーザが私を覚えていれば有効期限のあるトークンが発行されます。そうでない場合は、セッションセッションCookieが発行され、ブラウザセッションが終了すると(ブラウザが閉じられると)削除されます。 feathers.authentication(< 1.x ??)のJSON Webトークン(JWT)を使用する場合は、localStorageなどのストレージプロバイダにJSON Webトークン(JWT)を格納しています。ブラウザが閉じた後でログイントークンを消したい場合は、sessionStorageを使用してください。

私の現在のソリューションは、私がログインしたときに私のフォームの値に応じて、両方を使用することです。ユーザーが選択した場合は(私がチェックされていない覚えている場合も同様にstorage.setShouldPesist(false))私はこれを配置しますstorage.setShouldPersist(true)と呼ぶことにします「私を覚えています」 localstorageのフラグで、 "localStorage"モードであることを示します。私はダックタイプのストレージ(getItemsetItemなど)をfeather.authenticationに渡して、私のremembermeキーが存在するかどうかを調べます。その場合はlocalStorageを使用し、それ以外の場合はsessionsStorageを使用します。ここで

コードです:

// localOrSessionStore.js 
const { localStorage, sessionStorage } = global; 

export default function localOrSessionStore({ key }) { 
    let shouldPersist = localStorage.getItem(key) === 't'; 

    return { 
    setShouldPersist(persist) { 
     shouldPersist = !!persist; 
     if (persist) { 
     localStorage.setItem(key, 't'); 
     } else { 
     localStorage.removeItem(key); 
     } 
    }, 

    getItem(name) { 
     if (shouldPersist) { 
     return localStorage.getItem(name); 
     } 

     return sessionStorage.getItem(name); 
    }, 

    setItem(name, value) { 
     if (shouldPersist) { 
     return localStorage.setItem(name, value); 
     } 

     return sessionStorage.setItem(name, value); 
    }, 

    removeItem(name) { 
     if (shouldPersist) { 
     return localStorage.removeItem(name); 
     } 

     return sessionStorage.removeItem(name); 
    }, 
    }; 
} 

次に使用:

# feathers.js - where I set up feathers for my app 
export const storage = localOrSessionStore({ key: 'myapprmbr' }); 
export default feathers() 
    .configure(rest('/api').fetch(fetch)) 
    .configure(feathers.hooks()) 
    .configure(feathers.authentication({ 
    storage, // Passed into feathers-auth here 
    tokenKey: 'myappjwt', 
    }); 

新しい[email protected]>=1.xfeathers-authetication-clientパッケージは、より良い私を覚えて可能に私はまだ慣れていないよいくつかの変更を、持っています機能性。

関連する問題