1. 程式人生 > >laravel5.2實現區分前後臺使用者登入

laravel5.2實現區分前後臺使用者登入

1.前臺登入

直接使用laravel自帶的auth
php artisan make:auth
然後可以檢視路由檔案:

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

執行php artisan migrate
會發現生成了兩張表。

2.後臺登入

編輯配置檔案
config\auth.php
新增guards中的admin和providers中的admins

<?php

return
[ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider'
=> 'admins', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins'
=> [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'email' => 'auth.emails.password', 'table' => 'password_resets', 'expire' => 60, ], ], ];

3.建立資料模型

執行php artisan make:model Admin --migration
然後修改database\migrations中的資料表結構,複製user表的就可以
執行php artisan migrate 會發現生成了admin表

4.定義後臺路由

這裡我直接定義了一個路由組

Route::group(['prefix' => 'admin' ,'middleware' => 'admin'], function () {
    Route::get('login', 'Admin\[email protected]');

    Route::post('login', 'Admin\[email protected]');

    Route::get('register', 'Admin\[email protected]');

    Route::post('register', 'Admin\[email protected]');

    Route::get('logout', 'Admin\[email protected]');

    Route::get('/', 'Admin\[email protected]');
});

5.建立控制器

執行

php artisan make:controller Admin/AuthController
php artisan make:controller Admin/AdminController

AuthController.php可參照Auth中的AuthController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Admin;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

class AuthController extends Controller
{
    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    protected $redirectTo = '/admin';
    protected $guard = 'admin';
    protected $loginView = 'admin.login';
    protected $registerView = 'admin.register';

    public function __construct()
    {
        $this->middleware('guest:admin', ['except' => 'logout']);
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:admins',
            'password' => 'required|confirmed|min:6',
        ]);
    }

    protected function create(array $data)
    {
        return Admin::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);

    }
}

AdminController.php

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Auth;

class AdminController extends Controller
{

    public function __construct()
    {
        $this->middleware('auth:admin');
    }

    public function index()
    {
        $admin = Auth::guard('admin')->user();
        return view('admin.home');
    }

}

6.建立檢視

這裡直接複製auth中的檢視和home.blade.php到一個新的admin資料夾中。
這裡寫圖片描述
修改login和register中表單的action,新增上admin字首
修改layouts中的app.blade.php

<ul class="nav navbar-nav navbar-right">
                    <!-- Authentication Links -->
                    @if (Auth::guard('admin')->guest())
                        <li><a href="{{ url('/admin/login') }}">Login</a></li>
                        <li><a href="{{ url('/admin/register') }}">Register</a></li>
                    @else
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                                {{ Auth::guard('admin')->user()->name }} <span class="caret"></span>
                            </a>

                            <ul class="dropdown-menu" role="menu">
                                <li><a href="{{ url('/admin/logout') }}"><i class="fa fa-btn fa-sign-out"></i>Logout</a></li>
                            </ul>
                        </li>
                    @endif
                </ul>

現在試一下前後臺分別登入吧!

7.可能遇到的頁面跳轉問題

如果你遇到了這種情況可以嘗試修改一下Middleware\Authenticate.php

return redirect()->guest($guard.'/login');