2016-05-12 2 views
0

jgtを認証メカニズムとして使用して、角度jsおよびノー​​ドexpressで作業しています。私は、私のユーザー名とパスワードを投稿すると、角度のHTTP投稿を使用し、それは正常にjwtトークンを生成します。他のページをリダイレクトすることはできません。どのようにして、そのトークンを、角度JSを介して他のページのヘッダーとして設定できますか?Angular JSはHTTPポストリダイレクトで一般的なヘッダーを送信します

マイ角度コントローラは

var app = angular.module('authenticate', []); 

    app.controller('AuthenticateCtrl', function($scope, $http) { 

     $scope.login = function() { 
      option={'name':$scope.name,'password':$scope.password} 
      $http({ 
      method : "POST", 
      url : "/api/authenticate", 
      data:option 
      }).then(function mySucces(response) { 
      $scope.message = response.data; 
      //$scope.getData(response.data); 
      $http.defaults.headers.common['x-access-token'] = response.data; 
      window.location.href = '/api/home'; 
      alert("You are logged in.!"); 
      }, function myError(response) { 
      $scope.message = response.statusText; 
      //console.log(response.data); 
      console.log(response.statusText); 
      var alertPopup = $ionicPopup.alert({ 
       title: 'Login failed!', 
       template: 'Please check your credentials!' 
      }); 
      }); 
      } 

    }); 

HTMLスクリプトは、

<body ng-controller="AuthenticateCtrl"> 
    <div class="container"> 
    <h2>.</h2> 
    <input type="text" name="name" ng-model="name" placeholder="Name" required="" autofocus="" class="form-control" /></p> 
    <input type="password" name="password" ng-model="password" placeholder="Password" required="" class="form-control" /></p> 
    <button ng-click="login()" class="btn btn-lg btn-primary btn-block">Login</button> 
    <hr /> 
    {{ message }} 
</div> 
    </body> 

あり、ノードjsの一部を扱うPOSTリクエストは、

apps.get('/home', function(req, res, next) { 
    res.sendFile(dirname+'/public/home.html'); 
    }); 

しかし、リダイレクト家である、ですページ:

{"success":false,"message":"No token provided."} 

メッセージ。認証失敗のメッセージです。 誰でもこの問題を解決するのを手伝ってください。

答えて

0

an interceptorを使用してx-access-tokenを設定し、routingを使用してナビゲートする必要があります。 Angular SPAをナビゲートするのに、window.location.hrefを使用しないでください。

サンプルインターセプタは、次のようになります。

app.factory('sampleInterceptor', ['$location', function ($location) { 
    var sampleInterceptorFactory = {}; 
    var _request = function (config) { 
     config.headers = config.headers || {}; 
     config.headers['x-access-token'] = authData; 
     return config; 
    } 
    sampleInterceptorFactory.request = _request; 
    return sampleInterceptorFactory; 
}]); 

サンプルルータは次のようになります。

app.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
     when('/home', { 
     templateUrl: 'templates/home.html', 
     controller: 'HomeController' 
     }). 
     when('/login', { 
     templateUrl: 'templates/login.html', 
     controller: 'LoginController' 
     }). 
     otherwise({ 
     redirectTo: '/login' 
     }); 
    }]); 
+0

どのように迎撃や角度で働いてルーティング。あなたは例をお勧めしますか? – jicks

+0

はい、両方の例を含めるように回答を編集しました。 – Venkat

+0

ルータを使ってリダイレクトすると、URLの前に#があります。 – jicks

関連する問題