在官網下載 Laravel 5.4 配置并能在訪問
php artisan make:auth
復制代碼
生成后路由文件 routes/web.php
,自動有
Auth::routes();Route::get('/home', 'HomeController@index');
復制代碼
運行
php artisan migrate
復制代碼
執行命令后會生成 users
表和 password_resets
表,既 用戶表和密碼重置表。可以測試用戶登錄,注冊,找回密碼功能。 ##自定義用戶表登錄 在 config/auth.php
配置如下:
<?php
return ['defaults' => ['guard' => 'web','passwords' => 'users',],'guards' => ['web' => ['driver' => 'session','provider' => 'users',],'api' => ['driver' => 'token','provider' => 'users',],],'providers' => ['users' => ['driver' => 'eloquent','model' => App\User::class,],],'passwords' => ['users' => ['provider' => 'users','email' => 'auth.emails.password','table' => 'password_resets','expire' => 60,],],
];
復制代碼
認證是由 guards
和 providers
兩部分構成的, defaults
配置是默認選擇一個 guard
認證驅動,所以我們在這兩個配置項中分別添加一個 admin
和 admins
選項。
<?php'guards' => ['web' => ['driver' => 'session','provider' => 'users',],'admin' => ['driver' => 'session','provider' => 'admins',],'providers' => ['users' => ['driver' => 'eloquent','model' => App\User::class,],'admins' => ['driver' => 'eloquent','model' => App\Models\Admin::class,],],
復制代碼
創建后臺用戶表和model
php artisan make:model Adminphp artisan make:migration creaet_admins_table
復制代碼
在數據庫遷移文件 _create_admins_table
, 我們可以復制 users
遷移文件里的字段
Schema::create('admins', function (Blueprint $table) {$table->increments('id');$table->string('name');$table->string('email');$table->string('password');$table->rememberToken();$table->timestamps();});
復制代碼
執行php artisan migrate
###生成臨時數據 在 database/factories/ModelFactory.php
, 添加如下數據:
$factory->define(App\Admin::class, function (Faker\Generator $faker) {static $password;return ['name' => $faker->name,'password' => $password ?: $password = bcrypt('123456'),'email' => $faker->email,'remember_token' => str_random(10),];
});
復制代碼
打開命令行輸入:
php artisan tinkeruse App;factory(App\Admin::class,5)->create() //生成5條測試數據,你要幾條就輸入多少(Class,num)
復制代碼
###更改 Admin 模型類
<?phpnamespace App;use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;class Admin extends Authenticatable
{use Notifiable;/*** The attributes that are mass assignable.** @var array*/protected $fillable = ['name', 'email', 'password',];/*** The attributes that should be hidden for arrays.** @var array*/protected $hidden = ['password', 'remember_token',];
}
復制代碼
###創建控制器
php artisan make:controller Admin/LoginController
php artisan make:controller Admin/AdminController
復制代碼
編輯 Admin/LoginController.php
:
<?phpnamespace App\Http\Controllers\Admin;use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesUsers;class LoginController extends Controller
{use AuthenticatesUsers;/*** Where to redirect users after login / registration.** @var string*/protected $redirectTo = '/admin/index';protected $username;/*** Create a new controller instance.** @return void*/public function __construct(){$this->middleware('guest:admin', ['except' => 'logout']);$this->username = config('admin.global.username');}/*** 重寫登錄視圖頁面*/public function showLogin(){return view('admin.login.index');}/*** 自定義認證驅動* @return mixed*/protected function guard(){return auth()->guard('admin');}}復制代碼
修改 app\Http\Middleware\RedirectIfAuthenticated.php
:
public function handle($request, Closure $next, $guard = null){if (Auth::guard($guard)->check()) {// 根據不同 guard 跳轉到不同的頁面$url = $guard ? 'admin/dash':'/home';return redirect($url);}return $next($request);}
復制代碼
編輯 Admin\AdminController.php
:
<?phpnamespace App\Http\Controllers\Admin;use App\Http\Controllers\Controller;class AdminController extends Controller
{/*** Create a new controller instance.** @return void*/public function __construct(){$this->middleware('auth.admin:admin');}//public function index(){dd('用戶名:'.auth('admin')->user()->name);}
復制代碼
php artisan make:middleware AdminAuthMiddleware
復制代碼
編輯 app\Http\Middleware\AdminAuthMiddleware.php
public function handle($request, Closure $next, $guard = null){if (Auth::guard($guard)->guest()) {if ($request->ajax() || $request->wantsJson()) {return response('Unauthorized.', 401);} else {return redirect()->guest('admin/login');}}return $next($request);}
復制代碼
在 app\Http\Kernel.php
中注冊:
protected $routeMiddleware = [··· ···'auth.admin' => \App\Http\Middleware\AdminAuthMiddleware::class,];
復制代碼
###注冊路由 編輯 routes/web.php
:
Route::group(['prefix' => 'admin','namespace' => 'Admin'],function ($router)
{$router->get('login', 'LoginController@showLogin')->name('admin.login');$router->post('login', 'LoginController@login');$router->post('logout', 'LoginController@logout');$router->get('index', 'AdminController@index');
});
復制代碼
###視圖文件創建和修改 復制 resources\views\auth\login.blade.php
,到 resources\views\admin\login\index.blade.php
,修改表單提交地址
{{ url('/login') }} 改成 {{ route('admin.login') }}
復制代碼
訪問 你的站點/admin/login
###另外知識點:
發現后臺經常是用用戶名登錄的,而不是郵箱。
更改LoginController.php
添加:
/*** @return string*/public function username(){return 'name';//登錄名}
復制代碼
后修改 resources\views\admin\login\login.blade.php
把郵箱相關的html刪除換成
<div class="form-group"><label for="name" class="col-md-4 control-label">Name</label><div class="col-md-6"><input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}"></div>
</div>
復制代碼