sails.config.session
Sailsの組み込みセッションサポートの設定。
Sailsのデフォルトのセッション統合は、ExpressとConnectですでに成された優れた作業に大きく依存していますが、リクエストインタープリタにフックすることで独自の機能も追加しています。これにより、Sailsは、Socket.IOからの仮想リクエストを処理する際に、コードがreq.session
に加えた変更にアクセスして自動保存できます。最も重要なのは、コントローラの処理がHTTPリクエスト、WebSocketメッセージ、またはその両方を処理するように設計されているかどうかに関係なく、ExpressやConnectで使用してきた方法でreq.session
を使用するコードを記述できることです。
プロパティ | タイプ | デフォルト | 詳細 |
---|---|---|---|
adapter |
undefined |
指定しない場合、Sailsは基盤となるセッションミドルウェアにバンドルされているデフォルトのメモリストアを使用します。これは開発には問題ありませんが、本番環境では、代わりにインストール済みのスケーラブルなセッションストアモジュールの名前を渡す必要があります(例:@sailshq/connect-redis )。詳細は下記の本番環境の設定を参照してください。 |
|
name |
sails.sid |
セッションが有効になっている場合(Sailsアプリではデフォルトで有効)、レスポンスに設定し(そしてリクエストから読み取る)、セッションIDクッキーの名前です。(トップレベルのDNSドメイン(例:frog-enthusiasts.net )など、同じ共有クッキー名前空間から複数の異なるSailsアプリを実行している場合、各アプリに個別の固有のキーを設定するように特に注意する必要があります。そうでないと、間違ったクッキーが使用される可能性があります。) |
|
secret |
n/a | このセッションシークレットは、新しいアプリを作成すると自動的に生成されます。本番環境でこのシークレットを変更する際には注意が必要です。変更するとユーザーのセッションクッキーが無効になり、再度ログインする必要があります。これは署名付きクッキーの「クッキーシークレット」としても使用されることに注意してください。 | |
cookie |
下記の参照 | maxAge 、secure など、セッションIDクッキーの設定。詳細については、下記を参照してください。 |
|
isSessionDisabled |
(詳細は下記) | すべてのリクエストに対して実行される関数で、真偽値を返す場合、リクエストに対するセッションサポートが無効になります(つまり、req.session は存在しません)。デフォルトでは、この関数はリクエストパスをsails.LOOKS_LIKE_ASSET_RX正規表現と照合し、アセットのリクエスト時にセッションサポートを無効にします。 |
開発でRedisをセッションストアとして使用している場合、追加の設定オプションを使用できます。こちらで説明されているように、ほとんどのアプリはSailsのデフォルトのRedisサポートを使用できますが、高度なユースケースには次のオプション設定が含まれる場合があります。
プロパティ | タイプ | デフォルト | 詳細 |
---|---|---|---|
url |
undefined |
接続するRedisインスタンスのURL。以下に示す他の設定を1つ以上含むことができます。例:redis://:[email protected]:1234/5 は、host がmyredishost.com 、port が1234 、pass がmypass 、db が5 であることを示します。一般的に、混乱を避けるために、url または以下の設定の組み合わせを使用する必要があります。 |
|
host |
'127.0.0.1' |
Redisインスタンスのホスト名。url 設定が構成されている場合、この設定は無視されます。 |
|
port |
6379 |
Redisインスタンスのポート。url 設定が構成されている場合、この設定は無視されます。 |
|
pass |
undefined |
Redisインスタンスのパスワード。パスワードを使用していない場合は空欄のままにします。パスワードを含むurl 設定が構成されている場合、この設定はurl のパスワードを上書きします。 |
|
db |
undefined |
Redisインスタンス内で使用するデータベースのインデックス。指定する場合は、整数にする必要があります。(一般的なRedis設定では、これは0〜15の数になります。)パスワードを含むurl 設定が構成されている場合、この設定はurl のdbを上書きします。 |
|
client |
undefined |
使用する既に接続済みのRedisクライアント。指定されている場合、url 、host 、port の設定は無視されます。この設定は、Redis Sentinel設定を使用していて、ioredis などのモジュールを使用して接続する必要がある場合に役立ちます。 |
|
onRedisDisconnect |
undefined |
Redis接続が切断された場合にSailsが呼び出すオプションの関数です。サイトを一時的なメンテナンスモードまたは「パニックモード」にするのに役立ちます(例についてはsails-hook-panic-modeを参照してください)。 | |
onRedisReconnect |
undefined |
以前に切断されたRedis接続が復元された場合にSailsが呼び出すオプションの関数です(上記のonDisconnect を参照)。 |
|
handleConstructingSessionStore |
undefined |
標準のセッションストア構築動作の代わりにSailsが呼び出すオプションのオーバーライド関数です。この設定を使用するには、まず関連するソースコードを読んで理解してください。 |
注:
onRedisDisconnect
とonRedisReconnect
は、Sailsによって作成されたRedisクライアントに対してのみ呼び出されます。独自のRedisクライアントを提供する場合(上記のclient
オプションを参照)、切断または再接続の場合、これらの関数は自動的に呼び出されません。
互換性のあるバージョンを使用している限り、Connect/Express用に記述されたセッションアダプタはSailsで動作します。
Sails.jsで推奨される本番環境のセッションストアはRedisですが、一部のアプリではそれがオプションではないことを認識しています。幸いなことに、Sails.jsはほとんどのConnect/Express互換のセッションストアをサポートしているため、セッションをMongo、ローカルファイルシステム、またはリレーショナルデータベースなど、ほぼどこにでも保存できます。Sails.js、Express、Connectのコミュニティセッションストアをチェックしてください。NPMで利用可能。
Sailsの組み込みセッション統合は、セッションIDクッキーを使用して機能します。このクッキーはHTTP専用(XSS攻撃に対する保護策として)であり、デフォルトでは「sails.sid」という名前で設定されます。
デフォルトでは、クッキーは同一サイトの攻撃者に対して整合性がありません。
本番環境では、クッキーの名前(sails.config.session.name
)に「__Host-」プレフィックスを付けて、クッキーの範囲を単一のオリジンに制限することをお勧めします。
「__Host-」プレフィックスの詳細については、こちらを参照してください。
session: {
name: '__Host-sails.sid'
}
注:このプレフィックスを追加するには、"secure"フラグを
true
に設定する必要があります。
アプリのセッションIDクッキーの最大年齢/有効期限は、ミリ秒数で設定できます。
たとえば、24時間後にユーザーをログアウトするには
session: {
cookie: {
maxAge: 24 * 60 * 60 * 1000
}
}
それ以外の場合は、デフォルトでこのオプションはnull
に設定され、セッションIDクッキーは"Expires"または"Max Age"ヘッダーを送信せず、ユーザーのWebブラウザが開いている間のみ有効になります。
セッションIDクッキーに"Secure"フラグを設定するかどうか。
session: {
cookie: {
secure: true
}
}
HTTPSを使用していない開発中は、sails.config.session.cookie.secure
を未定義のままにしてください(デフォルト)。
しかし、本番環境ではtrue
に設定する必要があります。これにより、Webブラウザは、安全なプロトコル(https://
)以外ではセッションIDクッキーの送り返しを拒否するように指示されます。
注:プロキシ/ロードバランサの背後でHTTPSを使用している場合(HerokuなどのPaaSの場合)、
secure: true
を設定する必要があります。ただし、secure
を有効にしてセッションが機能するには、sails.config.http.trustProxy
という別のオプションも設定する必要があります。
本番環境では?はい。
Sailsの組み込みセッション統合に依存している場合は、本番環境では常にSSL証明書を使用してください。 そうしないと、セッションIDクッキー(またはその他の機密データ)がプレーンテキストで送信される可能性があり、喫茶店で攻撃者が認証済みユーザーのHTTPリクエストを盗聴し、セッションIDクッキーを傍受してなりすまし、悪用する可能性があります。
また、SSL証明書を持っており、常にhttp://
をhttps://
にリダイレクトしている場合でも、すべてのサブドメインに対して、secure: true
を設定することが重要です。(なぜなら、それがないと、すべてのHTTPトラフィックをすぐにリダイレクトした場合でも、最初のリクエストはhttp://
経由で行われ、セッションIDクッキーがプレーンテキストで送信されるためです。)
SailsでセッションIDクッキーを設定するための他の利用可能なオプション(domainなど)については、express-session#cookieを参照してください。
Sailsではデフォルトでセッションが有効になっています。アプリでセッションを無効にするには、.sailsrc
ファイルを変更してsession
フックを無効にします。session
を無効にするプロセスは、Gruntフックを無効にするプロセスと同じです(grunt: false
の代わりにsession: false
と入力します)。
注:セッションフックが無効になっている場合でも、
sails.config.session.secret
として設定されたセッションシークレットは、関連する場合は署名付きクッキーをサポートするために引き続き使用されます。セッションフックが無効になっており、アプリにセッションシークレットの設定がない場合(例:config/session.js
を削除した場合)、署名付きクッキーはアプリケーションで使用できなくなります。この動作をさらに高度に変更するには、sails.config.http
を使用して、アプリのHTTPミドルウェアを手動でカスタマイズできます。