フェザーはauthにJSON Webトークンを使用します。条件付きでトークンのexpiresIn
プロパティを設定するには、「remember me」がチェックされているかどうかに依存します。feathers.jsとJWTで「remember me」機能を実装する方法
答えて
JWTを覚えていない方法は、クライアント側にそれを保存することではありません。認証でFeathersクライアントを使用している場合、トークンはfeathers-jwt
としてlocalStorageに格納されます。 、あなたは私を覚えてクリックした場合、私はどうすべきだと思うものです - この方法は、(潜在的なセキュリティ上の意味を持つ)ハックです:あなたは
localStorage.removeItem('feathers-jwt')
更新思考を呼び出すことにより、次のブラウザセッションのために、それは「unremember」缶有効期限が切れるか、存在しない場合は、新しいトークンを自動的に発行するために使用するリフレッシュトークンを発行する必要があります。私は羽毛の開発者が何を示唆しているのか聞いてみたいと思います。私はこれを見て、もっと良い解決策を見つけたら報告します。
ユーザが私を覚えていれば有効期限のあるトークンが発行されます。そうでない場合は、セッションセッションCookieが発行され、ブラウザセッションが終了すると(ブラウザが閉じられると)削除されます。 feathers.authentication
(< 1.x ??)のJSON Webトークン(JWT)を使用する場合は、localStorage
などのストレージプロバイダにJSON Webトークン(JWT)を格納しています。ブラウザが閉じた後でログイントークンを消したい場合は、sessionStorage
を使用してください。
私の現在のソリューションは、私がログインしたときに私のフォームの値に応じて、両方を使用することです。ユーザーが選択した場合は(私がチェックされていない覚えている場合も同様にstorage.setShouldPesist(false)
)私はこれを配置しますstorage.setShouldPersist(true)
と呼ぶことにします「私を覚えています」 localstorageのフラグで、 "localStorage"モードであることを示します。私はダックタイプのストレージ(getItem
、setItem
など)を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.x
とfeathers-authetication-client
パッケージは、より良い私を覚えて可能に私はまだ慣れていないよいくつかの変更を、持っています機能性。
- 1. C#で "Remember Me"パスワード機能を実装する方法は?
- 2. Grailsアプリケーションで「remember me」を実装する
- 3. フェニックスでremember-meを実装する
- 4. WPFアプリケーションで「Remember me」を実装する方法
- 5. jsf 2.0の "remember me"機能
- 6. Spring SecurityのRemember-me機能
- 7. Recaptch2 Remember Me機能性?
- 8. WinForms/WPFの "Remember Me"チェックボックスを実装する最良の方法
- 9. Grails spring-security-core Remember me機能
- 10. Remember-me CookieとVarnish
- 11. ローカルでアプリケーションをテストするときに 'Remember Me'機能が動作する
- 12. 実装方法* Amazon Cognito sdkを使用して* Remember me *オプションを実装しますか?
- 13. Rails - "remember me"ケイパビリティ
- 14. Laravel Socialite Remember Me
- 15. node.js:connect-mongoとRemember meチェックボックス
- 16. ASP.NET Web APIクッキーを使用した「Remember Me」機能
- 17. 「Remember Me」機能のためにクッキーにTOKENとVERIFIERが必要ですか?
- 18. symfonyでカスタムのRemember meプロバイダを作成する方法
- 19. Spring Security remember-meサービス
- 20. Grails Spring Security Remember Me
- 21. asp.netのWebページで "Remember Me"
- 22. Remember Me機能を持つログインフォームとlogin_success.php URLへの不正なサイトアクセスPHP
- 23. Remember Me - ユーザ名を取得する - MVC
- 24. Passport Local Remember Me戦略
- 25. Laravel 5.3 Remember me Auth issue
- 26. thinkthruure IdentityServer「remember me」の設定
- 27. 春のセキュリティUsernamePasswordAuthenticationFilter with remember-me
- 28. 「Remember me」クッキーとCSRFプロテクションの保存
- 29. iPhoneでポーズ機能とダウンロード機能を実装する方法は?
- 30. Tablecellで編集機能と削除機能を実装する方法は?
回答ありがとうございますが、サーバー側はどうですか?それはexpiresInトークンプロパティで行うことができます。私はちょうど私がアプリ全体の認証設定以外のどこにそれを設定することができます理解していないが、それは方法ではない。 – Alendorff
サーバーにはJWTが格納されていないので、トークンが期限切れになっているかどうかを知る唯一の方法は、独自のトークンブラックリスト機能を実装することです。 feathers-authentication 1.0を使用すると、必要な場合は動的有効期限を設定できますが、ブラックリストなしでは有効期限前にトークンを無効にすることはできません。 – Daff
@daffそして、そのコードがユーザが出発する前に実行できないのであれば?例えば。突然のブラウザクラッシュ - 覚えていないためにSessionStorageを使用し、覚えておくためにLocalStorageを使用することができます。私はそれが覚えている状態を格納するためにreduxを使用し、あなたが 'feathers.authentication'設定に渡すカスタムストレージからそれをアクセスすることによって実装できると思います。 (ブラウザの更新の間に状態が維持されなければならないことを覚えておいてください)これは私が実装を見ているところです。あなたがreduxのようなグローバルステートストアを持っていない場合、フックのいくつかの種類。 –