angular-fullstack yeoman ジェネレーターから生成された meanjs アプリがあります
その中には、このような認証Angularサービスがあります-
'use strict';
angular.module('app')
.factory('Auth', function Auth($location, $rootScope, $http, User, $cookieStore, $q) {
var currentUser = {};
if ($cookieStore.get('token')) {
currentUser = User.get();
}
return {
login: function (user, callback) {
var cb = callback || angular.noop;
var deferred = $q.defer();
$http.post('/auth/local', {
email: user.email,
password: user.password
}).
success(function (data, status, headers, config) {
$cookieStore.put('token', data.token);
currentUser = User.get();
deferred.resolve(data);
return cb();
}).
error(function (data, status, headers, config) {
this.logout();
deferred.reject(data);
return cb(data);
}.bind(this));
return deferred.promise;
},
/**
* Delete access token and user info
*
* @param {Function}
*/
logout: function () {
$cookieStore.remove('token');
currentUser = {};
},
getToken: function () {
return $cookieStore.get('token');
}
};
});
したがって、基本的にサインインページコントローラーで、次のようなことをしています-
$scope.login = function () {
$scope.authError = null;
// Try to login
Auth.login({
email: $scope.user.email,
password: $scope.user.password
})
.then(function (data) {
// Logged in, redirect to home
console.log(data, 'gee');
$state.go('app.dashboard-v1');
})
.catch(function (err) {
$scope.authError = 'Email or Password not right';
});
};
そのため、サービスの成功とエラーの両方のコールバックにステートメントを入れようとしましたがconsole.log('something');
、いずれにしても出力されません。資格情報が正しくない場合はステータス コード 405を送信し、POST http://localhost:9000/auth/local 405 (Method Not Allowed)
資格情報が正しい場合は 200 を送信しています。では、これを修正するには、クライアント側のサービス コード、コントローラー コード、またはサーバー側のステータス コードを変更する必要がありますか?
[更新] @Bastien が提案した回答を試し、コントローラーのコードを次のように変更しました -
Auth.login({
email: $scope.user.email,
password: $scope.user.password
})
.then(function (data) {
// Logged in, redirect to home
$state.go('app.dashboard-v1');
toaster.pop('success','message','message');
console.log(data, 'gee');
},function(err){
$scope.authError = 'Email or Password not right';
console.log('err');
})
しかし、ブラウザコンソールにメッセージが表示されません。また、間違った資格情報を入力している場合にのみ、ブラウザコンソールにもう1つのエラーが表示されることに気付きました。次のとおりです-
TypeError: Cannot read property 'data' of undefined
at angular.js:9408
at processQueue (angular.js:13248)
at angular.js:13264
at Scope.parent.$get.Scope.$eval (angular.js:14466)
at Scope.parent.$get.Scope.$digest (angular.js:14282)
at Scope.parent.$get.Scope.$apply (angular.js:14571)
at done (angular.js:9698)
at completeRequest (angular.js:9888)
at XMLHttpRequest.requestLoaded (angular.js:9829)
これは関連性がありますか?