【发布时间】:2019-09-27 20:01:32
【问题描述】:
我正在尝试将我的应用程序与 Laravel 中的后端服务器连接
我有一个在请求中添加标头的拦截器:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log('----------------- SESSION -----------------');
console.log(this.session.token);
this.token = this.session.token;
const headers = this.buildRequestHeaders();
const authRequest = req.clone({
setHeaders: {
'Access-Control-Allow-Credentials': 'false',
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET",
'Authorization': `Bearer ${this.token}`
}
});
return next.handle(authRequest);
}
在服务器上我有一个中间件:
<?php
namespace App\Http\Middleware;
use App\Helpers\JsonResponseHelper;
use Closure;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Middleware\GetUserFromToken;
class JwtCheck extends GetUserFromToken
{
public function handle($request, Closure $next)
{
header('Content-Type', 'application/json');
header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Request-Headers', 'Origin, Authorization, Content-Type, Accept');
header('Access-Control-Allow-Origin', '*');
if (strpos($request->headers->get("Authorization"), "Bearer ") === false) {
$request->headers->set("Authorization", "Bearer " . $request->headers->get("Authorization"));
}
if (!$token = $this->auth->setRequest($request)->getToken()) {
$data['errors'] = trans('auth.failed');
$message = trans('auth.failed');
return JsonResponseHelper::dataResponse(trans('messages.error'), $data, true, 401, $message);
}
try {
//$user = $this->auth->authenticate($token);
$user = JWTAuth::parseToken()->authenticate($token);
} catch (TokenExpiredException $e) {
$data['errors'] = trans('messages.token-expired');
$message = trans('messages.token-expired');
return JsonResponseHelper::dataResponse(trans('messages.error'), $data, true, 401, $message);
} catch (JWTException $e) {
$data['errors'] = $e->getMessage();
$message = trans('messages.error');
return JsonResponseHelper::dataResponse(trans('messages.error'), $data, true, 401, $message);
} catch (TokenInvalidException $e) {
$data['errors'] = $e->getMessage();
$message = trans('messages.error');
return JsonResponseHelper::dataResponse(trans('messages.error'), $data, true, 401, $message);
} catch (Exception $e) {
$data['errors'] = $e->getMessage();
$message = trans('messages.error');
return JsonResponseHelper::dataResponse(trans('messages.error'), $data, true, 401, $message);
}
if (!$user) {
$data['errors'] = trans('auth.failed');
$message = trans('auth.failed');
return JsonResponseHelper::dataResponse(trans('messages.error'), $data, true, 401, $message);
}
$request->merge(array("user" => $user));
$request->merge(array("token" => $token));
return $next($request);
这是我的问题: https://i.stack.imgur.com/CG9Tq.png
这是发送到服务器的请求。显然我的 Access-Control-Allow-Originis 添加到请求标头中: https://i.stack.imgur.com/WXN0L.png
【问题讨论】:
-
你需要在你的服务器上添加
Access-Control-Allow-Origin。