1

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)

これは関連性がありますか?

4

1 に答える 1