2015-07-22 5 views
2

Я тестирую просвет в первый раз. Пробег auth Пробел вызывает ошибку. Я хочу знать, поставляется ли такое промежуточное ПО с просветом или нужно ли нам внедрять наши собственные? Это мои маршруты файл'auth' промежуточное ПО в просвете просвета люмен

$app->group(['middleware' => 'auth'], function ($app) { 

    $app->get('/', ['as' => 'api', 'uses' => '[email protected]']); 
}); 

и это ошибка при попытке доступа для маршрута

ErrorException in Manager.php line 137: 
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Auth\Guard' does not have a method 'handle' 
+0

код, который вы размещены не имеет отношения к вопросу –

+0

Это правда, я думаю. Но я думал, что промежуточное программное обеспечение 'auth' было включено, но оно бросает ошибку. – Shuvo

+1

Я не думаю, что Lumen имеет промежуточное ПО auth. Если вы не добавили это вручную? – Jerodev

ответ

4

Как вы видите, в auth Lumen контейнера, связанного с Illuminate\Support\Manager\AuthManager. Итак, да, вы должны создать свое собственное промежуточное ПО. Это пример вашего дела.

Сделать свой собственный межплатформенное в app/Http/Middleware

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Contracts\Auth\Guard; 

class Authenticate 
{ 
    /** 
    * The Guard implementation. 
    * 
    * @var Guard 
    */ 
    protected $auth; 

    /** 
    * Create a new filter instance. 
    * 
    * @param Guard $auth 
    * @return void 
    */ 
    public function __construct(Guard $auth) 
    { 
     $this->auth = $auth; 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if ($this->auth->guest()) { 
      if ($request->ajax()) { 
       return response('Unauthorized.', 401); 
      } else { 
       // Lumen has no Redirector::guest(), this line is put the intended URL to a session like Redirector::guest() does 
       app('session')->put('url.intended', app('url')->full()); 
       // Set your login URL here 
       return redirect()->to('auth/login', 302); 
      } 
     } 

     return $next($request); 
    } 
} 

После этого, связать ваше промежуточное программное обеспечение в контейнере. Вы можете сделать это в bootstrap/app.php. Добавьте эти две строки до return.

/* 
|-------------------------------------------------------------------------- 
| Load The Application Routes 
|-------------------------------------------------------------------------- 
| 
| Next we will include the routes file so that they can all be added to 
| the application. This will provide all of the URLs the application 
| can respond to, as well as the controllers that may handle them. 
| 
*/ 

$app->group(['namespace' => 'App\Http\Controllers'], function ($app) { 
    require __DIR__.'/../app/Http/routes.php'; 
}); 

$app->bind('App\Http\Middleware\Authenticate', 'App\Http\Middleware\Authenticate'); 
$app->alias('App\Http\Middleware\Authenticate', 'middleware.auth'); 

Теперь, вместо того, чтобы использовать auth в вашем ПО промежуточного слоя, используйте middleware.auth:

$app->group(['middleware' => 'middleware.auth'], function ($app) { 
    $app->get('/', ['as' => 'api', 'uses' => '[email protected]']); 
}); 
2

На самом деле все, что вам нужно сделать, это раскомментировать эти строки в bootstrap/app.php

$app->routeMiddleware([ 
    'auth' => App\Http\Middleware\Authenticate::class, 
]);