2015-10-20 24 views
-1

我驗證我的用戶在下列方式acessing它

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Input; 
use App\User; 
use Session; 
use Validator; 

class CollectionloginController extends Controller 
{ 
    /** 
    * Display a listing of the resource. 
    * 
    * @return Response 
    */ 
    public function getIndex(){ 
     return View('collectionmodule/login'); 
    } 

    public function postCollectionlogin(){ 

      $rules = array(

      'email'=>'required', 
      'password'=>'required' 

      ); 

      $validator = Validator::make(Input::all(), $rules); 

      if ($validator->fails()) 
      { 
       return redirect('collection/login')->withErrors($validator); 

      }else { 

        $cred = array(
         'email' => Input::get('email'), 
         'password' => Input::get('password') 
        ); 

       $role = User::where('email','=',Input::get('email'))->first(); 

       if (Auth::attempt($cred) && $role->role == 'collector'){ 
        if (Auth::check()){ 
         Session::put('role','collector'); 
         Session::put('name',Auth::user()->name); 
         return redirect('collection/home'); 
        } 

       } 
       else{ 
         Session::flush(); 
         Auth::logout(); 
         return redirect('collection/login')->with('login_errors',true); 
      } 
     } 


    } 

} 

之前如何驗證在Laravel 5類和我的路線是

//Collection started by vikram 
Route::controller('collection/login','CollectionloginController'); 
Route::controller('collection/home','CollectionController'); 

Route::get('collection', function() { 
    return view('collectionmodule.login'); 
}); 

Route::get('collection/logout',function(){ 
    Session::flush(); 
    Auth::logout(); 
    return Redirect::to('collection/target'); 
}); 

,且控制器

命名空間應用\ HTTP \控制器;

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Input; 
use App\User; 

class CollectionController extends Controller 
{ 
    /** 
    * Display a listing of the resource. 
    * 
    * @return Response 
    */ 

    public function getIndex(){ 

    $empid= Auth::user()->empid; 
    $invoice = Invoice::orderBy('Id', 'desc')->get(); 


    return View('collectionmodule/home')->with(array('invoices'=>$invoice)); 
} 
} 

我的問題是如何訪問任何功能之前認證類collectionContorller,就像如果通過身份驗證的用戶沒有收集器應該重定向到登錄頁面

我有其他類類似的麻煩也

一種方法我想通是這樣

public function __construct(){ 
      if(Session::get('role')!="collector"){ 
      $validotrs= "The User is not a collector"; 
     return redirect('collection/login')->withErrors($validator); 
} 
    } 

任何一個可以幫助我

回答

3

您不應該手動設置會話。如果用戶登錄,您可以通過Auth外觀訪問它,例如:Auth::user()

但基本上,如果你想檢查你的當前設置進行身份驗證或任何其他請求得到處理之前,你應該使用Middleware

php artisan make:middleware Collector 

App\Http\Middleware\Collector下,新創建的文件,您可以更改handle函數來表示你的邏輯:

public function handle($request, Closure $next) 
{ 
    if (Session::get('role') != "collector") 
     return redirect('collection/login'); 

    // Alternatively, using Auth Facade 

    if ($request->user()->role != 'collector') 
     return redirect('collection/login'); 

    return $next($request); 
} 

現在你有$routeMiddleware數組中註冊了中間件,App\Http\Kernel.php

'collector' => \App\Http\Middleware\Collector::class, 

在您的收藏 - 控制器你現在可以像這樣引用它:

public function __construct() 
{ 
    $this->middleware('collector'); 
} 

在每個請求collector中間件被檢查並執行由您定義的邏輯控制器。

編輯:

如果你需要動態的中間件,它看起來像這樣:

# /App/Http/Middlware/Role.php 
public function handle($request, Closure $next, $role) 
{ 
    if ($request->user()->role != $role) 
     return redirect('collection/login'); 

    return $next($request); 
} 

而在你的控制器:

public function __construct() 
{ 
    $this->middleware('role:collector'); // replace 'collector' with whatever role you need. 
} 
+0

我有這樣幾個模塊一樣,銷售,管理員等等,因此每個我都必須創建一箇中間件,或者我可以創建一些常見的MiddleWare類並添加函數來過濾每個角色? ,就像我們用來做之前的過濾器 – Vikram

+1

這絕對有可能,請看我的編輯。 – Tim

+0

所以創建adynamic中間件我必須運行相同的工匠命令嗎? – Vikram