2017-08-18 68 views
0

我使用laravel 5.4創建Restfull API並使用中間件組路由創建簡單的CRUD演示。 路線::組([ '中間件'=> 'AUTH:API'] 但它不工作羣組中間件不在laravel中工作5.4

路由/ api.php文件以下

Use App\Article; 
use Illuminate\Http\Request; 

Route::middleware('auth:api')->get('/user', function (Request $request) { 
    return $request->user(); 
}); 

Route::post('register', 'Auth\[email protected]'); 
Route::post('login', 'Auth\[email protected]'); 
Route::post('logout', 'Auth\[email protected]'); 

Route::group(['middleware' => 'auth:api'], function() { 
    Route::get('articles', '[email protected]'); 
    Route::get('articles/{article}', '[email protected]'); 
    Route::post('articles', '[email protected]'); 
    Route::put('articles/{article}', '[email protected]'); 
    Route::delete('articles/{article}', '[email protected]'); 
}); 

和我的控制器。文件應用\ HTTP \控制器\ ArticleController .PHP被以下 命名空間應用\ HTTP \控制器;

use App\Article; 
use Illuminate\Http\Request; 

class ArticleController extends Controller 
{ 
    public function index() 
    { 
     return Article::all(); 
    } 

    public function show(Article $article) 
    { 
     return $article; 
    } 

    public function store(Request $request) 
    { 
     $article = Article::create($request->all()); 

     return response()->json($article, 201); 
    } 

    public function update(Request $request, Article $article) 
    { 
     $article->update($request->all()); 

     return response()->json($article, 200); 
    } 

    public function delete(Article $article) 
    { 
     $article->delete(); 

     return response()->json(null, 204); 
    } 
} 

,但它不工作。 請給我一些幫助完整的解決方案。

控制器\ autth \ loginController.php

namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 
use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 

class LoginController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Login Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles authenticating users for the application and 
    | redirecting them to your home screen. The controller uses a trait 
    | to conveniently provide its functionality to your applications. 
    | 
    */ 

    use AuthenticatesUsers; 

    /** 
    * Where to redirect users after login. 
    * 
    * @var string 
    */ 
    protected $redirectTo = '/home'; 

    public function login(Request $request) 
    { 
     $this->validateLogin($request); 

     if ($this->attemptLogin($request)) { 
      $user = $this->guard()->user(); 
      $user->generateToken(); 

      return response()->json([ 
       'data' => $user->toArray(), 
      ]); 
     } 

     return $this->sendFailedLoginResponse($request); 
    } 

    public function logout(Request $request) 
    { 
     $user = Auth::guard('api')->user(); 

     if ($user) { 
      $user->api_token = null; 
      $user->save(); 
     } 

     return response()->json(['data' => 'User logged out.'], 200); 
    } 

    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest')->except('logout'); 
    } 
} 

AUTH \ registroController.php

namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use App\User; 
use Illuminate\Foundation\Auth\RegistersUsers; 
use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Validator; 

class RegisterController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Register Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles the registration of new users as well as their 
    | validation and creation. By default this controller uses a trait to 
    | provide this functionality without requiring any additional code. 
    | 
    */ 

    use RegistersUsers; 

    /** 
    * Where to redirect users after registration. 
    * 
    * @var string 
    */ 
    protected $redirectTo = '/home'; 

    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest'); 
    } 

    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'name' => 'required|string|max:255', 
      'email' => 'required|string|email|max:255|unique:users', 
      'password' => 'required|string|min:6|confirmed', 
     ]); 
    } 

    protected function registered(Request $request, $user) 
    { 
     $user->generateToken(); 

     return response()->json(['data' => $user->toArray()], 201); 
    } 

    /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return \App\User 
    */ 
    protected function create(array $data) 
    { 
     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 
} 

和我user.php的模型如下:

namespace App; 

use App\User; 

use Illuminate\Http\Requests; 
use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 
// use Zizaco\Entrust\Traits\EntrustUserTrait; 
use App\Http\Controllers\Controller; 

class User extends Authenticatable 
{ 
    use Notifiable; //, EntrustUserTrait; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    public function index() { 
     return User::all(); 
    } 

    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    public function generateToken() 
    { 
     $this->api_token = str_random(60); 
     $this->save(); 

     return $this->api_token; 
    } 
} 
+0

**註釋不是延長討論或調試會話**;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/152264/discussion-on-question-by-maulik-kanani-group-middleware-not-working-in-laravel)。如果您被要求澄清或附加代碼,請將其編輯到您的問題中。 –

回答

0

您正在使用資源路由。我喜歡這樣的簡單代碼

Route :: resource('articles','ArticleController');

,並添加在控制器中間件

use App\Article; 
use Illuminate\Http\Request; 

class ArticleController extends Controller 
{ 

    public function __construct() 
    { 
     $this->middleware('auth:api'); 
    } 
    public function index() 
    { 
     return Article::all(); 
    } 

    public function show(Article $article) 
    { 
     return $article; 
    } 

    public function store(Request $request) 
    { 
     $article = Article::create($request->all()); 

     return response()->json($article, 201); 
    } 

    public function update(Request $request, Article $article) 
    { 
     $article->update($request->all()); 

     return response()->json($article, 200); 
    } 

    public function delete(Article $article) 
    { 
     $article->delete(); 

     return response()->json(null, 204); 
    } 
}