2016-10-12 8 views
3

私はMEANスタックにはかなり新しく、私は現在mean.jsを使ってアプリケーションを構築しています。私は現在、ExpressとAngularでルーティングがどのように機能しているか見るために遊んでいます。私のサーバールートのRESTful Crud MEAN.js routing

ワン:

app.route('/api/projects/:projectId') 
    .get(users.requiresLogin, projects.read) 
    .post(users.requiresLogin, projects.apply) 
    .put(users.requiresLogin, projects.hasAuthorization, projects.update) 
    .delete(users.requiresLogin, projects.hasAuthorization, projects.delete); 

私は、この特定のルートに向けた要求のいずれかのタイプの前にユーザー認証を必要としていますし、私のusers.requireLoginコードは次のとおりですため現在

exports.requiresLogin = function(req, res, next) { 

    if (!req.isAuthenticated()) { 
    return res.status(400).send({ 
     message: 'User is not logged in' 
    }); 
    } 

    next(); 
}; 

私クライアント側のルートがあります

.state('projects.view', { 
     url: '/:projectId', 
     templateUrl: 'modules/projects/client/views/view-project.client.view.html', 
     controller: 'ProjectsController', 
     controllerAs: 'vm', 
     resolve: { 
      projectResolve: getProject 
     }, 
     data: { 
      pageTitle: 'Project {{ projectResolve.name }}' 
     } 

最後にクライアント側の解決策ルートは

getProject.$inject = ['$stateParams', 'ProjectsService']; 

    function getProject($stateParams, ProjectsService) { 

    return ProjectsService.get({ 
     projectId: $stateParams.projectId 
    }).$promise; 
    } 

ユーザーが認証されていない場合を除いてすべて正常に動作しています。リダイレクトする必要があります。現在、特定のルートにアクセスしているときは、何も起こっていません。コンソールにメッセージが表示されます。

angular.js:12011をGET http://localhost:3000/api/projects/57f86cfc2e363838211b19c5 400(不正なリクエスト)

私は私の質問は、私はので、私は彼をリダイレクトすることができ、ユーザがログインしていない場合をキャッチないか、だと思いますログインページ?

+0

statusCode 400でエラーメッセージが表示されますか? – abdulbarik

答えて

1

ああ、心配しないでください。さらに少し掘り下げて、mean.jsが返されたエラーコードに基づいて自動的にリダイレクトを処理するようです。私はログインするためにリダイレクトするために401を返すべきだった。あなたはExpress#redirect を使用することができます

angular.module('core').factory('authInterceptor', ['$q', '$injector', 
    function ($q, $injector) { 
    return { 
     responseError: function(rejection) { 
     if (!rejection.config.ignoreAuthModule) { 
      switch (rejection.status) { 
      case 401: 
       $injector.get('$state').transitionTo('authentication.signin'); 
       break; 
      case 403: 
       $injector.get('$state').transitionTo('forbidden'); 
       break; 
      } 
     } 
     // otherwise, default behaviour 
     return $q.reject(rejection); 
     } 
    }; 
    } 
]); 
0

それを使用する前にエクスプレスの正しいバージョンを確認してください。

exports.requiresLogin = function(req, res, next) { 

    var message = 'User is not logged in'; 

    if (!req.isAuthenticated()) { 
     res.redirect('/login?nologin=' + message); 
    }else{ 
     next(); 
    } 
};