2016-12-16 2 views
0

나는 뭔가를 이해하지 못하거나 내가 생각하는 것을 놓치고 있습니다. 나는 내가 스칼라/사용자 및 비밀번호가 확인 응용 프로그램 재생이 그래서 지금은 로그인 서비스 모두에서 잘 수있는 문제를 백엔드로 사용자 (즉, AngularJS와 1.5의) 권한을 부여하는 LoginPage이머리글에 Angularjs 토큰이 없습니다.

 var token = $cookies["XSRF-TOKEN"]; 
     if (token) { 
      $http.get('http://localhost:9000/ping') 
       .then(
        function (response) { 
         return $http.get("http://localhost:9000/users/" + response.data.userId) 
        }, function (response) { 
         token = undefined; 
         $cookies["XSRF-TOKEN"] = undefined; 
         return $q.reject("Token invalid"); 
        } 
        ).then(
         function (response) { 
          console.log(response.data); 
         }, function (response) { 
        console.log("error"); 
       } 
      ); 
     } 
     $http.post('http://localhost:9000/login', user) 
      .then(function (response) { 
      token = response.data.authToken; 
      console.log(token); 
      var userId = response.data.userId; 
      return $http.get('http://localhost:9000/users/' + userId) 
     }, function (response) { 
       console.log(response.data.err); 
       // return 'empty' promise so the right `then` function is called 
       return $q.reject("Login failed"); 
      }).then(
      function (response) { 
       console.log(response); 
      } 
     ) 
    } 

지금 모든 로그인하려면 로그인 enter image description here

로 괜찮 그러나 다음의 경우 I는 API에 GET 요청을 전송하고 XSRF 쿠키를 확인하고자하지만 쿠키가 전송되지 않습니다. 스칼라의 보안 형질 여기 401 statuscode

입니다 - 그래서 지금

def HasToken[A](p: BodyParser[A] = parse.anyContent)(f: String => Long => Request[A] => Result): Action[A] = 
Action(p) { implicit request => 
    val maybeToken = request.headers.get(AuthTokenHeader).orElse(request.getQueryString(AuthTokenUrlKey)) 
    maybeToken flatMap { token => 
    cache.get[Long](token) map { userid => 
     f(token)(userid)(request) 
    } 
    } getOrElse Unauthorized(Json.obj("err" -> "No Token")) 
} 

내 질문입니다 - 머리글 토큰 어디에 있습니까? 업데이트

: 여기 내 app.js는

'use strict'; 

    function testInterceptor($rootScope, $q, $timeout) { 
    return function(promise) { 
     return promise.then(
      function(response) { 
       return response; 
      }, 
      function(response) { 
       if (response.status == 401) { 
        $rootScope.$broadcast("InvalidToken"); 
        $rootScope.sessionExpired = true; 
        $timeout(function() {$rootScope.sessionExpired = false;}, 5000); 
       } else if (response.status == 403) { 
        $rootScope.$broadcast("InsufficientPrivileges"); 
       } else { 
        // Here you could handle other status codes, e.g. retry a 404 
       } 
       return $q.reject(response); 
      } 
     ); 
    }; 
} 

var app=angular.module('telephone', ['ngRoute', 'ngCookies']); 
app.factory('testInterceptor', testInterceptor); 
app.config(["$httpProvider", "$routeProvider",function ($httpProvider, $routeProvider) { 

    $httpProvider.interceptors.push('testInterceptor'); 

    $routeProvider.when('/login', {templateUrl: '../partials/login.html', controller: 'loginController'}); 
    $routeProvider.otherwise({redirectTo: '/login'}); 
}]); 
+0

처럼 추가 할 수 있도록 각 응용 프로그램 옆 요청에 대한 기본 헤더에 토큰을 추가 할 필요가 있다고 생각입니다 localhost 도메인에서 실행 중이거나 브라우저에서 어떻게 액세스합니까? 그들이 일치해야하기 때문에, otherwiser angle/javascript는 쿠키를 볼 수 없습니다. – Zyga

+0

localhost (angularjs localhost : 8000, scala Backend localhost : 9000)에서 실행 중임 – tbere

답변

0

난 당신이

function SetCredentials(user) { 
       $http.defaults.headers.common["Authorization"] = 'Bearer ' + user.access_token; 
       //Here Token added in header 
       $rootScope.globals = { 
        currentUser: { 
         username: user.userName, 
         authdata: user.access_token, 
         userid: user.userId, 
        } 
       }; 

       $cookieStore.put('globals', $rootScope.globals); 
       setUsers(user) 
      }; 
+0

SetCredentials를 사용하여 성공하지 못했습니다. – tbere

+0

SetCredentials 만 사용하십시오. 기본 헤더 헤더에 토큰을 추가하기 위해 – rvchauhan

+0

당신이 맞습니다. 헤더를 설정하면 모든 것이 잘 보입니다. – tbere

관련 문제