1

我有一个从 angular-fullstack yeoman 生成器生成的 meanjs 应用程序

并在其中提供这样的身份验证角度服务-

'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');在我的服务中的成功和错误回调中都添加语句,但无论如何都没有打印出来。我POST http://localhost:9000/auth/local 405 (Method Not Allowed)为我不正确的凭据发送一个 405 状态代码,为正确的凭据发送 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');
            })

但是我没有在浏览器控制台上收到任何消息,而且我注意到只有当我输入错误的凭据时,我才会在浏览器控制台中收到另一个错误,如下所示 -

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

0

你试过了吗:

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');
},
function(error){ //2nd function to handle the error (!= 200)
    $scope.authError = 'Email or Password not right';
});

“then”方法有多个参数:第一个用于成功处理程序,第二个用于错误处理程序

于 2015-11-01T16:39:16.367 回答