PHP Angular - JWT 授权持有者令牌

我正在尝试获取由 angular 发送到 php 的授权令牌。我的角度拦截器如下所示


intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    if (localStorage.getItem('token') != null) {

        const clonedReq = req.clone({

            headers: req.headers.set('Authorization', 'Bearer ' + localStorage.getItem('token'))

        });

        return next.handle(clonedReq).pipe(

            tap(

                succ => { },

                err => {

                    if (err.status == 401){

                        localStorage.removeItem('token');

                        localStorage.removeItem('username');

                        this.router.navigateByUrl('/user/login');

                    }

                }

            )

        )

    }

    else {

        return next.handle(req.clone());

    }

}

我控制台记录了查看输出的请求,它有令牌。

http://img4.mukewang.com/640c3f22000136c706450265.jpg

然后我转到开发人员工具的网络选项卡,查看令牌是否在请求中并且它在那里。

http://img3.mukewang.com/640c3f3400015a1406580077.jpg

现在如何在 php 中获取令牌?我试着按照这个问题的答案。但这也无济于事。以下是使用上述答案中的代码时的输出。

http://img3.mukewang.com/640c3f400001f76606580136.jpg


慕娘9325324
浏览 123回答 2
2回答

偶然的你

搜索谷歌,在这里我发现你必须在 $_SERVER['HTTP_AUTHORIZATION'] 中接收 JWT 但这至少在我的共享主机中不起作用,我尝试玩 .htaccess 文件但没有,你可以查看详细信息这里 [ Apache 2.4 + PHP-FPM 和授权标头你也可以通过 JSON 格式的角度将 JWT 发送到你的 php 文件,但如果你想通过 GET 或 POST 发送数据,我建议你使用 HttpClientModule 而不是 HttpRequest,在 PHP 中,这是我的测试文件,我在 URL 中发送了 JWT,这不是执行令牌的最佳形式,但在我的情况下有效,我希望它有所帮助。<?phpheader("Access-Control-Allow-Origin: *");header("Content-Type: application/json; charset=UTF-8");header("Access-Control-Allow-Methods: GET, POST");header("Access-Control-Max-Age: 3600");header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");require_once 'jwt/src/BeforeValidException.php';require_once 'jwt/src/ExpiredException.php';require_once 'jwt/src/SignatureInvalidException.php';require_once 'jwt/src/JWT.php';use \Firebase\JWT\JWT;$llave = 'TULLAVESECRETA';$authHeader = $_GET['tok'];try{$decoded = JWT::decode($authHeader, $llave, array('HS256'));&nbsp; &nbsp; &nbsp; &nbsp; echo json_encode($decoded);}catch(Exception $e){&nbsp; &nbsp; http_response_code(200);&nbsp; &nbsp; echo json_encode(array(&nbsp; &nbsp; &nbsp; &nbsp; "mensaje" => "Vuelve a iniciar sesion.",&nbsp; &nbsp; &nbsp; &nbsp; "error" => $e->getMessage()&nbsp; &nbsp; ));}?>

幕布斯7119047

在位于 api 文件夹的 .htaccess 文件中包含以下行:RewriteEngine OnRewriteCond %{HTTP:Authorization} ^(.*)RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]完整答案在这里:PHP POST 请求中缺少授权标头然后你可以用$_SERVER['HTTP_AUTHORIZATION']or读取你的“Bearer”+token$requestHeaders = apache_request_headers();$token = $requestHeaders["Authorization"];&nbsp;您仍然需要从$token.if (preg_match('/Bearer\s(\S+)/', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {// alternately '/Bearer\s((.*)\.(.*)\.(.*))/' to separate each JWT string&nbsp; &nbsp; $stripped_token =&nbsp; $matches[1];}
打开App,查看更多内容
随时随地看视频慕课网APP