我正在尝试使用Symfony 2.8 AbstractGuardAuthenticator
来创建一个简单的Authenticator,它可以使用令牌或Base64
编码的用户名:密码。这个概念很简单,但授权标签总是返回NULL
,原因我不明白。
通过Postman发送的HTTP标头:
POST /testproject/www/app_dev.php/test HTTP/1.1
Host: localhost
Authorization: Basic dGVzdDoxMjM0
Cache-Control: no-cache
Postman-Token: 30a64d1b-e4e2-4d01-34f3-5e09b90379b6
Content-Type: multipart/form-data; boundary=---- WebKitFormBoundary7MA4YWxkTrZu0gW
简单检查代码:
class TokenAuthenticator extends AbstractGuardAuthenticator
public function getCredentials(Request $request) {
var_dump(base64_decode('dGVzdDoxMjM0'));
die(var_dump($request->request->get('Authorization')));
}
输出:
string(9) "test:1234"
NULL
我是否在这里打电话请求正确的部分从标头包中取出一些东西?我觉得我在这里错过了一些非常明显的东西。
当我转储标题时,我可以看到真正令人沮丧的标记:
var_dump($request->headers);
object(Symfony\Component\HttpFoundation\HeaderBag)#15 (2) {
["headers":protected]=>
array(15) {
//other variables cut out because of length
["authorization"]=>
array(1) {
[0]=>
string(18) "Basic dGVzdDoxMjM0"
}
}
解决方案来自qooplmao
通过以下方式访问headerbag而不是请求:
$request->headers->get('authorization');