Laravel 拉威尔和科尔斯与巴里夫/拉威尔科尔斯
我在拉雷维尔遇到了一个奇怪的问题,我已经挣扎了一天多了。这与我所看到的关于laravel cors软件包的其他帖子不同,比如: 我已经按照说明设置了这个包,我为Laravel添加的唯一其他内容是JWT的包 现在的情况是CORS只在POST请求中工作。我可以使用邮递员点击我的身份验证路径,一切看起来都很好,但只要我尝试任何GET请求,就不会发送CORS头。我尝试将不同的控制器移动到我的“未受保护”路线,以消除JWT干扰的可能性,但这不会改变任何事情 这是我的routes.php:Laravel 拉威尔和科尔斯与巴里夫/拉威尔科尔斯,laravel,cors,Laravel,Cors,我在拉雷维尔遇到了一个奇怪的问题,我已经挣扎了一天多了。这与我所看到的关于laravel cors软件包的其他帖子不同,比如: 我已经按照说明设置了这个包,我为Laravel添加的唯一其他内容是JWT的包 现在的情况是CORS只在POST请求中工作。我可以使用邮递员点击我的身份验证路径,一切看起来都很好,但只要我尝试任何GET请求,就不会发送CORS头。我尝试将不同的控制器移动到我的“未受保护”路线,以消除JWT干扰的可能性,但这不会改变任何事情 这是我的routes.php: <?ph
<?php
// unprotected routes
Route::group(['prefix' => 'api/v1', 'middleware' => 'cors'], function () {
Route::post('authenticate', 'AuthenticateController@authenticate');
Route::resource('trips', 'TripController'); // moved to unprotected to test CORS
});
// protected routes
Route::group(['prefix' => 'api/v1', 'middleware' => ['cors', 'jwt.auth']], function () {
Route::get('authenticate/user', 'AuthenticateController@getAuthenticatedUser');
Route::resource('airports', 'AirportController');
});
将您的路由组从CSRF保护中排除。
app/Http/Middleware/VerifyCsrfToken.php
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'api/v1/*'
];
}
)() 我建议您自己实现cors中间件,而不是使用barryvdh/laravel cors。如果您感兴趣,请告诉我,我会将其作为答案发布。我正在考虑这样做,我认为这不仅仅是设置对“*”的访问权限那么简单,我了解到您需要考虑“飞行前”请求。期待答案。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
class AuthenticateController extends Controller
{
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
try {
// verify the credentials and create a token for the user
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials'], 401);
}
} catch (JWTException $e) {
// something went wrong
return response()->json(['error' => 'could_not_create_token'], 500);
}
// if no errors are encountered we can return a JWT
return response()->json(compact('token'));
}
public function getAuthenticatedUser()
{
try {
if (!$user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['user_not_found'], 404);
}
} catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
return response()->json(['token_expired'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
return response()->json(['token_invalid'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
return response()->json(['token_absent'], $e->getStatusCode());
}
// the token is valid and we have found the user via the sub claim
return response()->json(compact('user'));
}
}
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'api/v1/*'
];
}