2016-04-16 8 views
2

パスワードとrefresh_token権限を使用して、前面のoauth2-serverと背面のoauth2-serverを実装しました。認証トークンが期限切れになると(この時間はサーバーで設定されます)、simple-ember-authはリフレッシュトークン要求を発行し、新しい認証トークンを取得します。単純なember-auth/oauth2-serverからの自動ログアウト

しかし、私は自動的に一定の非アクティブ時間後にセッションを無効にする必要があります。現在、OAuth2PasswordGrantAuthenticatorはトークンリフレッシュ要求の広告を無限に発行しているようです。

これを実装する方法については、ご提案やご意見をお待ちしております。

+0

理由だけではなく、 '.invalidate()'自分自身を呼び出すことはありませ? – Lux

+0

@Lux私は喜んでそれを行うでしょう。非アクティブを検出するにはどうすればよいですか? – eight

+0

['refreshAccessTokens:false'](https://ember-simple-auth.com/api/classes/OAuth2PasswordGrantAuthenticator.html)を設定して、自動リフレッシュを無効にしたと考えましたか? – jelhan

答えて

2

@Luxがコメントで述べたように、ユーザーアクティビティの検出を実装する必要があります。 keypressmousemovescrollなどのようなイベントをwindow要素に見ることができます。活動に関するものではなく、ページにフォーカスがある場合は、Page Visibilty Apiと考えることができます。アプリケーションとのやり取りについてもっと詳しく知りたい場合は、おそらく移行のようなイベントを観察してください。

ユーザーアクティビティがない場合にのみ、Ember.debounceを使用してOAuth2PasswordGrantAuthenticator invalidate()メソッドを呼び出します。

おそらくApplication Instance Initializersで実装するのが最適です。このような

何か(テストしていません):

// app/instance-initializers/logout-if-inactive.js 
export function initialize(applicationInstance) { 
    var session = applicationInstance.lookup('service:session'); 
    var logoutAfter = 15 * 60 * 1000 // in milliseconds 
    var logout = function() { 
    Ember.run.debounce(session, 'invalidate', logoutAfter); 
    } 
    window.onmouseevent = logout; 
    window.onkeypress = logout; 
} 

export default { 
    name: 'logout-if-inactive', 
    after: 'session', 
    initialize: initialize 
}; 
+0

これは私のために働いたのですが、 'after: 'session''を' after:'ember-simple-auth''に変更するだけでした。 –

+0

簡単な質問:2つのタブが開いているときに機能しますか?彼が他のタブをクリックしなければ15分後にユーザーが蹴られるだろうと思います。 – Dougui

+0

推奨されるソリューションでは、まだ複数のタブをサポートしていません。したがって、アクティビティの状態はウィンドウ間で共有する必要があります。エッジケースを回避するには、セッションストアと同じテクニックを使用する必要があります。 debounceで 'session.invalidate'を直接呼び出さないでください。別のタブからのアクティビティがないことを最初に確認する別の機能を使用します。 – jelhan

関連する問題