私の Ember アプリには、ログイン用のアクションがあります。
login: function(emailAddress, password) {
this.get('session').authenticate('authenticator:jwt', {
'identification': emailAddress,
'password': password
}).catch((reason) => {
console.log('Reason: ' + JSON.stringify(reason));
this.set('errorMessage', 'Login failed.');
});
}
サーバー ( http://127.0.0.1:8091 ) でテストすると、正常に動作します。応答が 200 の場合、ログインしています。401 の場合、エラー メッセージが設定されています。
問題は ember-cli-mirage で発生します。テスト用に次のコードがあります。
this.post('http://127.0.0.1:8091', function(db, req) {
let body = JSON.parse(req.requestBody);
if (body.handler === 'test@example.com!' && body.password === 'secretpassword') {
return {
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImFiYzEyMyJ9.X0O3xMVikn-5l9gXBU5a2XF6vlMmTzm4mCqUNA68e-A',
id: 'abc123'
};
} else {
return new Response(401, {}, {});
}
});
テストトークンを送信するだけで、資格情報が正しい場合に機能します。アプリにログインできます。しかし、間違った資格情報で試してみると、JS コンソールに次のエラーが表示されます。
キャッチされていない TypeError: 未定義のプロパティ 'split' を読み取ることができません
少し調べたところ、次のコードで呼び出される関数 getTokenData 内でエラーが発生しているようです。
authenticate: function authenticate(credentials, headers) {
var _this2 = this;
return new _ember['default'].RSVP.Promise(function (resolve, reject) {
var data = _this2.getAuthenticateData(credentials);
_this2.makeRequest(_this2.serverTokenEndpoint, data, headers).then(function (response) {
_ember['default'].run(function () {
var token = _ember['default'].get(response, _this2.tokenPropertyName);
var tokenData = _this2.getTokenData(token);
var expiresAt = _ember['default'].get(tokenData, _this2.tokenExpireName);
var tokenExpireData = {};
_this2.scheduleAccessTokenRefresh(expiresAt, token);
tokenExpireData[_this2.tokenExpireName] = expiresAt;
response = _ember['default'].merge(response, tokenExpireData);
resolve(_this2.getResponseData(response));
});
}, function (xhr) {
_ember['default'].run(function () {
reject(xhr.responseJSON || xhr.responseText);
});
});
});
},
と書かれている行を参照してくださいvar tokenData = _this2.getTokenData(token);
。リクエストが拒否されたので、2 番目の関数 (拒否されたプロミス) を呼び出すべきではありませんか?
応答が空の 401 だったため、ember-simple-auth-token が存在しないトークンを操作しようとしているようです。拒否された要求にもトークンを含めようとしましたが、それでも同じエラーが発生します。
応答がローカル サーバー (および実際のサーバー) から送信された場合、正常に動作することを覚えておいてください。
Mirage をデバッグする方法が見つかりませんでした。回答の詳細を確認するにはどうすればよいですか? ブラウザから開発者ツールの [ネットワーク] タブにリクエストが表示されません。
これを修正するには、次に何を調べる必要がありますか?