2015-05-14 40 views
-1

我創建了一個網站,目前我正在處理登錄詳細信息。Javascript護照 - 總是得到「未經授權」

我正在使用Passport插件構建一個完整的應用程序,但每次嘗試登錄時,無論我做什麼,我都會得到「未經授權」。

登錄控制器

$scope.login = function(form) { 
    $scope.submitted = true; 

    if(form.$valid) { 
    Auth.login({ 
     email: $scope.user.email, 
     password: $scope.user.password, 
    }) 
    .then(function() { 
     // Logged in, redirect to home 
     $location.path('/'); 
    }) 
    .catch(function(err) { 
     $scope.errors.other = err.message; 
     console.log(err); 
    }); 
    } 
}; 

AUTH服務

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) { 
     $cookieStore.put('token', data.token); 
     currentUser = User.get(); 
     deferred.resolve(data); 
     return cb(); 
    }). 
    error(function(err) { 
     this.logout(); 
     deferred.reject(err); 
     return cb(err); 
    }.bind(this)); 

    return deferred.promise; 
    }, 

服務器端INDEX.JS

'use strict'; 

var express = require('express'); 
var passport = require('passport'); 
var auth = require('../auth.service'); 

var router = express.Router(); 

router.post('/', function(req, res, next) { 
    passport.authenticate('local', function (err, user, info) { 
    var error = err || info; 
    if (error) return res.json(401, error); 
    if (!user) return res.json(404, {message: 'Something went wrong, please try again.'}); 

    var token = auth.signToken(user._id, user.role); 
    res.json({token: token}); 
    })(req, res, next) 
}); 

module.exports = router; 

我的護照插件比較新,所以我不知道在哪裏可以找到錯誤。告訴我,如果你需要更多的代碼。

這是我從控制檯得到消息:

Failed to load resource: the server responded with a status of 401  (Unauthorized) angular.js:9866 
GET http://localhost:9000/api/users/me 401 (Unauthorized) 
+0

需要更多代碼:)需要看您的來電'passport.use'。 –

+0

我錯過了我的項目中導致問題的一些代碼 – Detilium

回答

-1

發現問題

我錯過了一些代碼。我不知道爲什麼,但我做到了。問題已解決。

這是在app.js缺少的代碼:

.factory('authInterceptor', function ($rootScope, $q, $cookieStore, $location) { 
return { 
    // Add authorization token to headers 
    request: function (config) { 
    config.headers = config.headers || {}; 
    if ($cookieStore.get('token')) { 
     config.headers.Authorization = 'Bearer ' + $cookieStore.get('token'); 
    } 
    return config; 
    }, 

    // Intercept 401s and redirect you to login 
    responseError: function(response) { 
    if(response.status === 401) { 
     $location.path('/login'); 
     // remove any stale tokens 
     $cookieStore.remove('token'); 
     return $q.reject(response); 
    } 
    else { 
     return $q.reject(response); 
    } 
    } 
}; 
}) 

.run(function ($rootScope, $location, Auth) { 
    // Redirect to login if route requires auth and you're not logged in 
    $rootScope.$on('$stateChangeStart', function (event, next) { 
     Auth.isLoggedInAsync(function(loggedIn) { 
     if (next.authenticate && !loggedIn) { 
      $location.path('/login'); 
     } 
     }); 
    }); 
}); 
+0

很高興您設法解決您的問題!爲了可能會在搜索結果中看到它的其他SO用戶的興趣,最好直接刪除此問題或者至少說明您如何解決問題。 –