6. ユーザ管理¶
ここではユーザ管理機能の利用方法について説明します。
6.1. ユーザの作成¶
最初にユーザオブジェクトを作成して登録するユーザ情報をプロパティに設定します。
var user = new Nebula.User();
var option = {
"company" : "NEC",
"department" : "AAA",
"tel" : "xxx-xxx-xxxx"
}
user.set("email", "Eメールアドレス"); // 必須
user.set("password", "パスワード"); // 必須
user.set("username", "ユーザ名"); // オプション
user.set("option", option); // オプション
6.1.1. ユーザの登録¶
作成したユーザをBaaS サーバに登録するには、ユーザオブジェクトの register() を呼び出します。
user.register()
.then(function(userObj) {
// 成功時の処理
// userObj: 登録されたユーザオブジェクト(プロパティに登録日時等の追加あり)
})
.catch(function(error) {
// 失敗時の処理
});
6.2. ユーザの取得¶
ユーザを取得するには、 query() の引数に検索条件を指定して呼び出します。
検索条件 conditions のプロパティには、_id, email, username のいずれかを指定します。 (conditions に null を指定した場合は全件検索になります)
レスポンスには、検索条件に一致したユーザオブジェクトの配列が返ります。
var conditions = {
"_id" : "ユーザID"
}
Nebula.User.query(conditions)
.then(function(users) {
// 成功時の処理
// users: ユーザオブジェクトの配列
})
.catch(function(error) {
// 失敗時の処理
});
6.3. ユーザの更新¶
ユーザを更新するには、 update() の引数にユーザオブジェクトのインスタンス(更新後のユーザ情報)を指定して呼び出します。
ユーザオブジェクトに設定するユーザIDは必須になります。
※ カレントユーザ以外を更新する場合は、SDK 初期化時のアプリケーションキーにマスターキーを指定する 必要があります。
// あらかじめ更新対象のユーザオブジェクトを query() メソッドなどで取得
var option = {
"company" : "NEC",
"department" : "AAA",
"tel" : "xxx-xxx-xxxx"
}
user.set("_id", "ユーザID"); // 必須
user.set("email", "Eメールアドレス"); // オプション
user.set("password", "パスワード"); // オプション
user.set("username", "ユーザ名"); // オプション
user.set("option", option); // オプション
Nebula.User.update(user)
.then(function(userObj) {
// 成功時の処理
// userObj: 更新後のユーザオブジェクト
})
.catch(function(error) {
// 失敗時の処理
});
6.4. ユーザの削除¶
ユーザを削除するには、remove() の引数にユーザオブジェクトのインスタンスを指定して呼び出します。
ユーザオブジェクトに設定するユーザIDは必須になります。
// あらかじめ削除対象のユーザオブジェクトを query() メソッドなどで取得
user.set("_id", "ユーザID"); // 必須
Nebula.User.remove(user)
.then(function() {
// 成功時の処理
})
.catch(function(error) {
// 失敗時の処理
});
注意
カレントユーザ以外を削除する場合は、SDK 初期化時のアプリケーションキーにマスターキーを指定する必要があります。
6.5. ユーザのログイン¶
ユーザがログインする場合には、login() を呼び出します。
login() の引数にはユーザ情報を JSON で指定します。
var userInfo = {
"email" : "Eメールアドレス"
"password" : "パスワード"
};
Nebula.User.login(userInfo)
.then(function(userObj) {
// 成功時の処理
// userObj: ログイン後のユーザオブジェクト(ログイン有効期間等の追加あり)
})
.catch(function(error) {
// 失敗時の処理
});
6.6. カレントユーザの取得¶
ログイン中のカレントユーザの情報を取得するには、current() を呼び出します。
Nebula.User.current()
.then(function(user) {
// user はログイン中のユーザオブジェクト
}
.catch(function(error) {
// 失敗時の処理。
// ログイン中状態でない場合はこちらが呼ばれる
};
6.7. ユーザのログアウト¶
ユーザがログアウトする場合には、logout() を呼び出します。
// あらかじめカレントユーザオブジェクトのインスタンスを取得しておく
Nebula.User.logout()
.then(function() {
// 成功時の処理
})
.catch(function(error) {
// 失敗時の処理
});
6.8. クライアント証明書認証 (Node.jsのみ)¶
クライアント証明書認証を使用すると、ユーザはログインを明示的に行わずに、認証済みユーザとして各種APIを使用することができます。
プロキシを使用しない場合は、NebulaService#setClientCertificate() で証明書情報の設定を行います。 クライアント証明書(PKCS#12形式)、証明書のパスフレーズを含むオブジェクト、もしくは、クライアント証明書(PEM形式)と、その秘密鍵(PEM形式)を指定します。 あわせて信頼するCA証明書を追加指定することもできます。
NebulaService#setClientCertificate()の使用例
const fs = require('fs');
// PKCS#12(pfx)と、そのパスフレーズを指定します
const certOptions = {
pfx: fs.readFileSync(CLIENT_CERT_PFX_PATH),
passphrase: CLIENT_CERT_PASSPHRASE,
ca: fs.readFileSync(TRUSTED_CA_PEM_PATH)
};
// cert、key を別々に指定することもできます
// const certOptions = {
// cert: fs.readFileSync(CLIENT_CERT_PEM_PATH),
// key: fs.readFileSync(CLIENT_CERT_KEY_PEM_PATH),
// // CA証明書は複数件指定することができます
// ca: [ fs.readFileSync(TRUSTED_CA_PEM_PATH_1), fs.readFileSync(TRUSTED_CA_PEM_PATH_2)]
//};
Nebula.setClientCertificate(certOptions);
注釈
サーバ側でログインの状態を管理するため、login(),logout()などは使用しません。 自ユーザ情報の取得が必要な場合、User.queryCurrent()を使用してサーバに問い合わせを行います。
注釈
クライアント証明書認証を使用するためには、事前にサーバの環境構築、設定が必要となります。 詳細は クライアント証明書認証 を参照してください。
また、Tomcatで直接認証を行う場合、クライアント証明書の期限切れ等の問題があると TLSのセッション確立ができません。 クライアントは通信失敗として扱い、ステータスコード0のエラーが返却されます。
クライアント証明書を使用した場合にのみ通信ができない場合、サーバの設定とあわせ、証明書に問題が無いかご確認下さい。
6.8.1. HTTPSプロキシを使用する場合¶
HTTPS プロキシを使用する場合は、setClientCertificate() ではなく、NebulaService#setHttpsProxy()のオプションパラメータとして証明書情報を付与します。 設定する内容はsetClientCertificate()と同様です。
NebulaService#setClientCertificate()とNebulaService#setHttpsProxy() を両方設定した場合は、 setHttpsProxy() の設定が優先されます。
NebulaService#setHttpsProxy()の使用例
const fs = require('fs');
// p12(pfx)形式のクライアント証明書(証明書/秘密鍵)を指定、p12ファイルのパスフレーズを指定
// 信頼するCA証明書として、2件を指定する場合
Nebula.setHttpsProxy({ host: 'proxysv.example.com', port: 8080}, {
pfx: fs.readFileSync('clientCertificate.p12'),
passphrase: 'password',
ca: [fs.readFileSync('caCert1.pem'), fs.readFileSync('caCert2.pem')]
});
// pem形式のクライアント証明、キーを使用。CA証明書を1件指定
Nebula.setHttpsProxy({ host: 'proxysv.example.com', port: 8080}, {
cert: fs.readFileSync('clientCert.pem'),
key: fs.readFileSync('clientKey.pem'),
ca: fs.readFileSync('caCert1.pem')
});
6.9. OpenID Connectリンク情報取得¶
OpenID Connectリンク情報を取得するには、getAccountLinks() の引数にユーザオブジェクトのインスタンスを指定して呼び出します。
ユーザオブジェクトに設定するユーザIDは必須になります。
// あらかじめリンク情報取得対象のユーザオブジェクトを query() メソッドなどで取得
user._id = "ユーザID"; // 必須
Nebula.User.getAccountLinks(user)
.then(function(links) {
// 成功時の処理
// links: リンク情報 (Nebula.AccountLink インスタンス) の配列
})
.catch(function(error) {
// 失敗時の処理
});
注意
カレントユーザ以外のリンク情報を取得する場合は、SDK 初期化時のアプリケーションキーにマスターキーを指定する必要があります。
注釈
オフライン機能/SDE4SD使用時は使用できません。
6.10. OpenID Connectリンク情報削除¶
OpenID Connectリンク情報を削除するには、deleteAccountLink() の第一引数にユーザオブジェクトのインスタンス、第二引数に削除するリンクユーザIDを指定して呼び出します。
ユーザオブジェクトに設定するユーザIDは必須になります。
// あらかじめリンク情報削除対象のユーザオブジェクトを query() メソッドなどで取得
user._id = "ユーザID"; // 必須
Nebula.User.deleteAccountLink(user, "リンクユーザID")
.then(function() {
// 成功時の処理
})
.catch(function(error) {
// 失敗時の処理
});
注意
カレントユーザ以外のリンク情報を削除する場合は、SDK 初期化時のアプリケーションキーにマスターキーを指定する必要があります。
注釈
オフライン機能/SDE4SD使用時は使用できません。