2017-06-14 114 views
0

我希望你的意见,以实现某些东西。我有一个API,我想限制用户的访问。但是,短小的事情,在页面/登录的操作登录控制器中,我为验证的用户生成令牌,然后返回它。那么,这是我的问题之一。在动作控制器中必须返回响应,而我的令牌是以json格式发送的,并且它在浏览器中显示,但我不想要这样,我只是想保留响应或者在某些事情中使我的角色部分该令牌并以其方式照顾它。所以我的方法登录:基于令牌的认证http拦截器

public function loginAction(Request $request) 
{ 

    $username= $this->get('security.token_storage')->getToken()->getUser()->getEmail(); 
    $serviceUser = $this->container->get('ubb_user_login'); 
    $tokenUser = $serviceUser->generateToken($username); 
    $response = new JsonResponse(array('Token' => $tokenUser)); 

    return $response; 
} 

第二个问题。我不知道在哪里提取令牌。在控制器我试过的东西:

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

$http.get(
    '/api/user/login' 
).then(function (success) { 
    $scope.token = success.data.Token; 
    $window.localStorage.setItem('Token', token); // it's okay used like this localStorage? 
}); 
}); 

在这里,我只想把从/ login操作的令牌,将其保存在本地存储,然后以显示它使用$ http请求拦截每一个请求。该部分起作用。如果我在报头发送一个随机字符串身份验证它的工作,这让我访问API:

function httpInterceptor() { 
return { 
    request: function(config) { 
     config.headers.authorization = 'jdjdnnkdkd'; 
     return config; 
    }, 
    responseError: function(errorResponse) { 
     switch (errorResponse.status) { 
      case 403: 
       window.location = '/login'; 
       break; 
      case 401: 
       window.location = '/login'; 
     } 
     return $q.reject(errorResponse); 
    } 
} 
} 

所以,问题我遇到: 1)如何发送令牌,以便角度把它,但不能在浏览器中显示?比方说,我有一个访问api的菜单,如果用户没有通过身份验证,点击一个未经身份验证的链接,它将在登录页面上发送给我,当我成功验证后,在菜单上重定向我? 2)返回令牌后,在哪里使用角?在哪个控制器?以及如何保存它?

非常感谢,谢谢。

回答

1

看起来你需要一个独立的api资源来处理令牌。您是否尝试过使用FOSOAuthServeBundle?它帮助了很多与建立OAuth认证,令牌等

一般来说,你需要有令牌单独调用,即:

  • angluar应用使得请求到get token资源,一个令牌返回,并临时存储在角应用
  • 使用该令牌每个后续请求 - 检查如何设置哪些URL必须的OAuth保护的OAuth的捆绑配置,但束需要照顾这对你

R您看到这个问题,看看这个q/a How to store authentication bearer token in browser cookie using AngularJS

+0

感谢您的回应,但我想用我的想法,我已经实现了Auth令牌,它通过给定的令牌将用户返回给我,唯一的部分是一。如何发送角度。你能给我一些信息,以便这个工作吗? – IleNea

+0

我更新了我的答案,是否有足够的信息给你? – m1n0