Laravel:如果未设置会话,则重定向到登录页面

时间:2017-06-07 01:38:24

标签: php session authentication laravel-5 laravel-5.3

我想在Laravel中创建一个登录系统。我有一个登录页面和一个仪表板。在访问仪表板之前,我想检查管理员是否已登录。一切正常但唯一的问题是如果用户尝试直接从URL访问仪表板(如http://localhost/myproject/dashboard),我希望系统能够检查会话是否已设置。如果已设置,请加载页面。如果没有,请将其重定向到带有消息的登录页面。我在master.blade.php文件中编写了检查代码,以查看是否设置了会话

这是我的登录页面,其中包含表格(视图):

<div class="container">

         @if (session('status'))
         <div class="alert alert-danger fade in">
               <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
               <i class=""></i> <strong align="center">{{session('status')}}</strong>
               </div>
            @endif

        <form class="form-signin" action="auth_admin" method="post">
        <h2 class="form-signin-heading">admin login</h2>
        <div class="login-wrap">

            <input type="text" class="form-control" name="admin_email" placeholder="Email ID" autofocus>

            <input type="password" class="form-control" name="admin_password" placeholder="Password">

            <input type = "hidden" name = "_token" value = "<?php echo csrf_token(); ?>">

            <label class="checkbox">
                <span class="pull-right"> <a href="#"> Forgot Password?</a></span>
            </label>
            <button class="btn btn-lg btn-login btn-block" type="submit">LOGIN</button>


        </div>

      </form>

    </div>

这是我的路线:

Route::get('webadmin','Admin_controller@index');

Route::get('adminlogin','Admin_controller@admin_login_page');

Route::post('auth_admin','Admin_controller@auth_admin');

这是我的控制器:

<?php

namespace App\Http\Controllers;

use App\General_model;

use App\Http\Requests;

use Illuminate\Http\Request;

use Illuminate\Foundation\Validation\ValidatesRequests;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

use Illuminate\Foundation\Auth\Access\AuthorizesResources;

use DB;

class Admin_controller extends Controller
{   

    public function index()
    {
      return view('adminpanel.index');
    }


    public function admin_login_page()
    {
     return view('adminpanel.loginpage');   
    }

    public function auth_admin(Request $request)
    {
    $admin_email    = $request->input('admin_email');
    $admin_password = md5($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('Admin_controller@index');

    } else {
        return redirect()->action('Admin_controller@admin_login_page')->with('status','Incorrect Email ID or Password');
    }

    }
}

这是我的master.blade.php(查看)

<!DOCTYPE html>
<html lang="en">
  <head>
  @include('adminpanel.template.header')

    <?php
    if(!Session::has('admin_email') && !Session::has('admin_name')) {
    return Redirect::to('Admin_controller@admin_login_page')->with('status','Please login to continue!');
    }
    ?>

  </head>

  <body>

  <section id="container" class="">

      <!--top bar start-->
      <header class="header white-bg">
      @include('adminpanel.template.top_bar')
      </header>
      <!--top bar end-->


      <!--sidebar start-->
      <aside>
      @include('adminpanel.template.sidebar')    
      </aside>
      <!--sidebar end-->


      <!--main content start-->
      <section id="main-content">
        <section class="wrapper">
        @yield('main_content')        
        </section>
      </section>
      <!--main content end-->



  </section>

  @include('adminpanel.template.footer')

  </body>
</html>

1 个答案:

答案 0 :(得分:0)

添加此方法

public function __construct()
{

    $this->middleware("auth");

}

在您的控制器中

相关问题