2017-06-07 60 views
0

で働いていない私は、ユーザー・セッションはLaravelは5.4:カスタムミドルウェアは、ルート

<?php 

namespace App\Http\Middleware; 

use Closure; 

class Checkusersession 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if (!$request->session()->has('admin_name')) { 
      // user value cannot be found in session 
      return redirect('adminlogin'); 
     } 

     return $next($request); 
    } 
} 

を確認するには、次のミドルウェアを作成し、これは私のルートである:これは私のkernel.phpある

Route::get('webadmin',['middleware' => 'usersession','[email protected]']); 

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, 
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 
    'usersession' => \App\Http\Middleware\Checkusersession::class, 
]; 

これはセッションを作成するコントローラメソッドです:

public function auth_admin(Request $request) 
{ 
    $admin_emai = $request->input('admin_email'); 
    $admin_password = $request->input('admin_password'); 

    $checklogin = DB::table('admin_login') 
     ->select('admin_id','admin_email','admin_name') 
     ->where([ 
      'admin_email' => $admin_email, 
      'admin_password' => $admin_password 
     ])->first(); 

    if (count($checklogin) > 0) { 
     $request->session()->put('admin_id',$checklogin->admin_id); 
     $request->session()->put('admin_name',$checklogin->admin_name); 
     $request->session()->put('admin_email',$checklogin->admin_email); 

     return redirect()->action('[email protected]'); 
    } else { 
     return redirect()->action('[email protected]_login_page')->with('status','Incorrect Email ID or Password'); 
    } 
} 

ミドルウェアがセッション(admin_name)が存在するかどうかを確認します。そうでない場合は、ユーザーをログインページにリダイレクトします。それは動作していません。 urlからwebadmin(ダッシュボード)に直接アクセスすると、セッションが設定されていなくてもアクセスできます。助けてください。

+0

コントローラのリダイレクトの前にdd($ request-> session())を作成して、セッションが正常に作成されたかどうかを確認してください。また、config/session.phpファイルで設定が正しいかどうか確認してください。 laravelのAuthクラスを使用することをお勧めします。 –

+0

ここでも同じ問題があります:/ – juniorgarcia

答えて

2

あなたのルートが間違っている、あなたは(L5.4で)としてそれを書く必要があります。

Route::get('webadmin', '[email protected]')->middleware('usersession'); 

、あるいはを:L5.3で

Route::group(['middleware' => 'auth'], function(){ 
    Route::get('webadmin', '[email protected]'); 
}); 

(あなたが質問をタグ付けしているとして)

また
Route::get('webadmin',['middleware' => 'usersession', 'uses => '[email protected]']); 

を、あなただけのヨーヨーにdd(request());または同様の操作を行うことを試みた:、およびL5.4に私はあなたにも書くことができると思いますそれは実際に発砲されていることを確認するには、ミドルウェアハンドル機能?

+1

ここで同じ問題があります。経路は私のカスタムミドルウェアには届かない。 – juniorgarcia

関連する問題