Symfony 基于令牌的身份验证http拦截器
我想听听你的意见,以便有所成就。我有一个api,我想限制用户的访问。但是短篇故事,在页面/登录的实际登录控制器中,我为经过身份验证的用户生成令牌并返回它。嗯,我的一个问题来了。在动作控制器中,必须返回一个响应,我的令牌以json格式发送,并显示在浏览器上,但我不想这样,我只想保持响应或某种形式,以便我的角度部分能够获取该令牌并以其方式处理它。因此,我的方法是登录:Symfony 基于令牌的身份验证http拦截器,symfony,angular-http-interceptors,Symfony,Angular Http Interceptors,我想听听你的意见,以便有所成就。我有一个api,我想限制用户的访问。但是短篇故事,在页面/登录的实际登录控制器中,我为经过身份验证的用户生成令牌并返回它。嗯,我的一个问题来了。在动作控制器中,必须返回一个响应,我的令牌以json格式发送,并显示在浏览器上,但我不想这样,我只想保持响应或某种形式,以便我的角度部分能够获取该令牌并以其方式处理它。因此,我的方法是登录: public function loginAction(Request $request) { $username=
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请求拦截器在每个请求上显示它。那部分有效。如果我在header auth中发送了一个随机字符串,它正在工作,并允许我访问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) 如何发送令牌以使angular获取令牌,但不在浏览器中显示?假设我有一个访问api的菜单,如果用户没有验证,单击未经验证的链接,它会在登录页面上发送给我,在我成功验证后,在菜单上重定向我?
2) 返回令牌后,在何处使用它?哪个控制器?如何拯救它
非常感谢您。您似乎需要一个单独的api资源来处理令牌。你试过使用吗?它在设置oauth身份验证、令牌等方面有很大帮助 通常,您需要单独调用令牌,即:
- angluar应用程序向
资源发出请求,返回一个token并临时存储在angluar应用程序中get token
- 为每个后续请求使用该令牌-检查oauth bundle配置,了解如何设置哪些URL必须受oauth保护,但该bundle会为您解决这个问题
关于你的角度问题,看看这个q/a谢谢你的回答,但我想用我的想法,我已经实现了Auth令牌,它通过给定的令牌返回给我用户,唯一的部分就是这个。如何发送它。你能给我一些信息让这个工作吗?