2015-12-30 98 views
0

我正在jwt angular + java球衣认证。我能够将jwt令牌从服务器发送回客户端,在Chrome控制台中可以将其视为状态码为200的POST响应。错误捕获JWT

我的问题是我不能将它保存在一个变量,以便我可以执行解码。我得到一个错误这样的:

TypeError: href is null 
e/<()angular.min.js (line 107) 
Ze/this.$get</<()angular.min.js (line 81) 
f/<()angular.min.js (line 119) 
lf/this.$get</r.prototype.$eval()angular.min.js (line 133) 
lf/this.$get</r.prototype.$digest()angular.min.js (line 130) 
lf/this.$get</r.prototype.$apply()angular.min.js (line 134) 
g()angular.min.js (line 87) 
T()angular.min.js (line 92) 
Uf/</w.onload()angular.min.js (line 93) 
stackFrame.js (line 357) 
<System> 
error is:undefined 

这里是我的代码:

myApp.controller('loginController', ['$scope', '$http', function ($scope, $http) 
{ 
$scope.email = ""; 
$scope.password = ""; 

$scope.loginForm = function() { 
    var data = {email: $scope.email, password: $scope.password}; 
    var url = 'rs/loginResource'; 
     $http.post(url, data).success(function (response) 
     { 
      console.log("token is: " + response); 
     }).error(function (error) 
     { 
      console.log("error is:" + error); 
     }); 
}; 
}]); 

回答

0

你的JSON发送令牌?或作为纯文本?

我最近在HAM堆栈上使用了基于jwt的认证,并且在对象中提供了令牌,所以响应类似于{token:'asdasds.sdadad.asdad'},我通常以以下形式在Angular中调用服务器:

$http({ 
    method: 'POST', 
    url: 'rs/loginResource', 
    data: { 
     email: $scope.email, 
     password: $scope.password 
    } 
}) 
.then(function (resp) { 
    var token = resp.data.token 
}) 
.catch(function(error){ 
    return error; 
}); 
+0

我使用'Response.ok(token).build();'jersery方法发送令牌。我猜jax-rs球衣的自动响应生成器功能导致了这个问题。令牌处于这样的形式只是来:'eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhbGljZSIsImlzcyI6Imh0dHBzOlwvXC9jMmlkLmNvbSIsImV4cCI6MTQ1MTQxNDU0MH0 .HvguthVdVZ8IuP6Hsko95I70jB41jpZLqAC4VAmphDJcnRwdBBkeVBVS8RNP9z1J1c7bjzeXL5gaufr6P02GhoMwh37l58Sxzwu 8dyxLZOyyEI7A03yZkmXzRKi_TPPG-vQR6Ya9omUPioG1mPU9ZOI4XTuZooRyxph8uh9JJfw' – kittu

+0

你使用Java的球衣作为后端? – kittu

+0

不,我在Nodejs上使用Hapijs作为后端,但实际上并不重要,唯一重要的是响应对象的外观如何,何时以角度接收它。我只注意到你正在使用.success(函数(响应))来接收已解决的承诺。你可以用.then替换它吗(函数(响应))? –