Laravel 403以前无法正常工作的API错误

时间:2018-08-09 21:36:28

标签: php laravel ionic-framework cors wampserver

截至昨天,以下代码有效。但是,今天,我不得不在laravel中运行php artisan config:cache命令,因为我添加了一个软件包,现在我不错的ionic应用程序不想运行任何连接,因为我不断收到此403错误。

我在安装“ rap2hpoutre / laravel-log-viewer”:“ ^ 0.19.1”并缓存后开始错误,但是我认为这与它无关。我很确定我的缓存在此之前是最新的。

jwt产生相同的错误。

以前,该应用程序无需使用cors插件即可运行。

它在本地和服务器上为我提供了此错误(因为我也必须在此缓存)。

此错误与调试时遇到的先前错误不同。

当我通常在Chrome中拉出路线http://xxx/api/home时-它返回的效果很好...邮递员中的情况相同

感谢您的帮助!

错误

选项http://xxx/api/home 403(禁止) 无法加载http://xxx/api/home:飞行前响应没有HTTP正常状态。

IONIC

basicGet_no_token(rl){
        console.log('basicGet - ' + this.base_url + rl);
        return new Promise((resolve, reject) => {
            this.http.get(this.base_url + rl, 
                {headers: new HttpHeaders({
                    'Content': 'application/json',
                    'Accept': 'application/json',
                })})
                .subscribe(res => {console.log(res);resolve(res);}, (err) => {this.handleError(err);console.log(err);reject(err);});
        }); 
    }

LARAVEL

Route::group(['middleware' => ['addHeaders']], function () {
    Route::get('home', 'api\WelcomeController@home');
});

class addHeaders
{
    public function handle($request, Closure $next)
    {
    if ($request->getMethod() == "OPTIONS") {
      return response(['OK'], 200)
        ->withHeaders([
          'Access-Control-Allow-Origin' => '*',
          'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE',
          'Access-Control-Allow-Credentials' => true,   
          'Access-Control-Allow-Headers' => 'Origin, Content-Type, X-Auth-Token, authorization, X-Requested-With'
        ]);
    }

    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE')
        ->header('Access-Control-Allow-Credentials', true)
        ->header('Access-Control-Allow-Headers', 'Origin, Content-Type, X-Auth-Token, authorization, X-Requested-With');

    }
}

class WelcomeController extends Controller
{
  public function home()
  {
        $r['message']="Welcome!";
    $r['allow']=true;
    $p=compact('r');
    return response()->json($p, 200);
  }
}


class Kernel extends HttpKernel
{

    protected $middlewareGroups = [
          'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    protected $routeMiddleware = [
        'auth'      => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic'  => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings'    => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can'       => \Illuminate\Auth\Middleware\Authorize::class,
        'guest'     => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'jwt'           => \App\Http\Middleware\JWT::class,
        'addHeaders'    => \App\Http\Middleware\addHeaders::class,
      'jwt.auth'    => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
      'jwt.refresh'   => \Tymon\JWTAuth\Middleware\RefreshToken::class,        
        'throttle'    => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}

3 个答案:

答案 0 :(得分:4)

此答案可能并不适合所有人,但是如果您创建了自定义请求,却忘记了授权方法返回true,则可能会遇到此错误。

我正在使用策略中的授权进行处理,并且经常忘记请求验证。创建自定义请求时仔细检查

注意:还请注意,如果您使用的是策略,则可能会忘记将策略映射到要在AuthServiceProvider中进行建模的

答案 1 :(得分:1)

如开头所述,您正在使用缓存-至少其中一个用于config

某些软件包在Laravel的缓存机制中不能很好地发挥作用,有时您会忘记使用任何缓存-请务必牢记这一点!

因此,请不要在dev中使用任何缓存(这是我个人的选择,不浪费时间解决不存在的问题)。

在生产中,在部署过程中,您需要绝对确保将重新创建所有缓存。

这些功能可能对您有用:

php artisan cache:clear

php artisan route:clear

php artisan config:clear

php artisan view:clear

所以请检查一下...

答案 2 :(得分:0)

我能够找到我的配置的备份副本并还原它。