基礎功能:后臺登錄、退出、后臺首頁頁面的展示
1、創建管理員資料表
資料字典:在以后開發專案的時候經常的去用到,資料字典就是通過表格化的形式展示了資料表中應該有的欄位資訊,
表名:manager
1、創建遷移檔案
php artisan make:migration create_manager_table
2、撰寫遷移檔案的代碼,檔案位置:database/migrations/
public function up()
{
Schema::create('manager', function (Blueprint $table) {
$table->increments('id'); //主鍵
$table->string('username',20)->notNULL(); //用戶名
$table->string('password')->notNULL(); //密碼
$table->enum('gender',[1,2,3])->notNULL()->default('1'); //性別 1男 2女 3保密
$table->string('mobile',11); //手機
$table->string('email',50); //郵箱
$table->tinyInteger('role_id'); //角色
$table->timestamps(); //時間
$table->rememberToken(); //記住登錄
$table->enum('status',[1,2])->notNULL()->default('2'); //賬號狀態
});
}
public function down()
{
//刪表方法
Schema::dropIfExists('manager');
}
3、執行遷移檔案
php artisan migrate:install //首次使用遷移先生成遷移記錄表
php artisan migrate
4、快速填充資料
插件 faker
創建填充器檔案 php artisan make:seeder ManagerTableSeeder
撰寫填充器的代碼檔案 使用方法參考:https://packagist.org/packages/fzaninotto/faker
提示:在laravel中系統提供了一個用戶密碼加密的函式:bcrypt,語法:bcrypt(密碼文明)
database\seeds\ManagerTableSeeder.php
<?php
use Illuminate\Database\Seeder;
class ManagerTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$faker = Faker\Factory::create("zh_CN");
for($i=0;$i<100;$i++) {
$data[] = [
'username' => $faker->username,
'password' => bcrypt("123456"),
'gender' => mt_rand(1, 3),
'mobile' => $faker->phoneNumber,
'email' => $faker -> email,
'role_id' => mt_rand(1, 6),
'created_at' => date('y-m-d H:i:s', time()),
'status' => mt_rand(1, 2)
];
}
DB::table('manager')->insert($data);
}
}
執行填充器檔案 php artisan db:seed --class=ManagerTableSeeder
5、后臺登錄頁面的展示
確定路由 /admin/public/login
到routes/web.php中添加路由
Route::group(['prefix'=>'admin'],function () {
Route::get('public/login', 'Admin\PublicController@login');
});
6、創建控制器檔案
php artisan make:controller Admin\PublicController
7、創建需要的login方法 在app\Http\Controllers\Admin\PublicController.php中添加
public function login(){
return view('admin.public.login');
}
8、創建需要的視圖檔案 以h-ui admin模板演示 http://www.h-ui.net/H-ui.admin.shtml
將login.html檔案復制到 /resources/views/admin/public/下 如無admin/public檔案夾 自己手動創建
改login.html名為login.blade.php 將頁面中使用的js css檔案地址替換為專案中實際的檔案地址
9、登錄頁面驗證碼添加
驗證碼的下載地址:https://packagist.org/packages/mews/captcha 安裝命令:composer require mews/captcha
10、配置config/app.php檔案中的providers和aliases陣列
providers中加 Mews\Captcha\CaptchaServiceProvider::class,
aliases中加 'Captcha' => 'Mews\Captcha\Facades\Captcha',
11、修改模板驗證碼圖片url地址為 {{Captcha::src('edu')}}
edu為自己配置 配置地址 vendor\mews\captcha\config\config.php
'edu' => [
'length' => 4,
'width' => 120,
'height' => 36,
'quality' => 90,
'math' => false,
],
修改驗證碼錯誤資訊為中文:打開 resources/zh-CN/validation.php,
在總陣列中追加如下鍵值對: 'captcha' => ':attribute 不正確,',
在 attributes 陣列中追加如下鍵值對:
'captcha' => '驗證碼',
12、管理員登錄的自動驗證 提交的路由地址路由:/admin/public/check post
將模板檔案中接收用戶名 密碼的 url修改為 /admin/public/check
13、添加csrf驗證的隱藏域 添加位置 :from表單內的任何位置 如 {{csrf_field()}}</from>
14 記住登錄功能 給“使我保持登錄狀態”復選框添加一個默認值如 value=https://www.cnblogs.com/linzenews/p/1
<input type="checkbox" name="online" id="online" value="https://www.cnblogs.com/linzenews/p/1">
使我保持登錄狀態</label>
15 撰寫check方法
語法:$this -> validate($request,[規則陣列]);
public function check(Request $request){
$this->validate($request,[
'username' =>'required|min:2|max:20', //最小2 最大20位
'password' =>'required|min:6', //最小6位
'captcha' =>'required|size:4|captcha', //驗證碼長度
]);
16 在登錄模板頁面上顯示自動驗證沒有通過的時候的錯誤資訊
<SCRIPT type="text/javascript">
@if (count($errors) > 0)
var allError="";
@foreach ($errors->all() as $error)
allError +="{{$error}}<br>";
@endforeach
layer.alert(allError,{title:'錯誤提示'});
layer.msg(allError, {
time: 20000, //20s后自動關閉
btn: ['確定']
});
@endif
</SCRIPT> //使用layerjs插件 記得引入layer
17、管理員身份驗證
語法:Auth::guard(指定guard實體) -> attempt(需要驗證的用戶資訊關聯陣列,[bool值]);
因需要auth門面 所以在PublicController.php中引入
use Auth;
18、在/config/auth.php中添加guard實體
仿照官方原有的實體 guards陣列中添加
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
providers陣列中添加
'admin' => [
'driver' => 'eloquent',
'model' => App\Admin\Manager::class,
],
// 'model' => App\Admin\Manager::class 為創建實體所用到的模型 稍后添加
19、創建需要使用的模型(guard需要使用)
php artisan make:model Admin/Manager
20、定義模型的基本屬性:app\Admin\Manager.php檔案中 添加
protected $table = 'manager'; //定義當前模型需要關聯的mysql表
引入
use Illuminate\Foundation\Auth\User as Authenticatable;
然后修改 繼承class Manager extends Authenticatable
21、繼續身份驗證 PublicController.php檔案
添加 $data= https://www.cnblogs.com/linzenews/p/$request -> only(['username','password']);
$data['status'] = '2';
$result=Auth::guard('admin')->attempt($data,$request->get('online'));
22、manager.php
完整代碼:
<?php namespace App\Admin; use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Auth\User as AuthManager; class Manager extends AuthManager { protected $table='manager'; }
23、根據錯誤資訊判斷跳轉方向:
語法:return redirect(路由) -> withErrors([錯誤資訊的陣列]);
if($result){
return redirect("/admin/index/index");
}
else{
return redirect("/admin/public/login")->withErrors(['loginerror'=>'用戶名密碼錯誤']);
}
完整代碼:
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Auth;
class PublicController extends Controller
{
//登錄頁面的展示
public function login(){
return view('admin.public.login');
}
public function check(Request $request){
$this->validate($request,[
'username' =>'required|min:2|max:20',
'password' =>'required|min:6',
'captcha' =>'required|size:4|captcha',
]);
//繼續開始進行身份核實
$data= https://www.cnblogs.com/linzenews/p/$request -> only(['username','password']);
$data['status'] = '2';
$result=Auth::guard('admin')->attempt($data,$request->get('online'));
if($result){
return redirect("/admin/index/index");
}
else{
return redirect("/admin/public/login")->withErrors(['loginerror'=>'用戶名密碼錯誤']);
}
}
//logout為添加的退出登錄方法
public function logout(){
Auth::guard('admin')->logout();
return redirect("/admin/public/login");
}
}
//記得在web.php中添加 logout規則 Route::get('public/logout', 'Admin\PublicController@logout');
后臺首頁的展示
定義后臺首頁的路由約定:/admin/index/index /admin/index/welcome
24、添加路由 web.php中
Route::get('index/welcome','Admin\IndexController@welcome');
Route::get('manager/index','Admin\Managercontroller@index');
25、 創建需要的控制器檔案
php artisan make:controller Admin/IndexController
26、撰寫index方法、welcome方法,展示各自的視圖
public function index(){
return view('admin.index.index');
}
public function welcome(){
return view('admin.index.welcome');
}
27、創建需要的兩個視圖檔案(index.blade.php和welcome.blade.php)
復制h-ui admin模板檔案夾中的 index.html welcome.html檔案到resources\views\admin\index\下 并改名為 index.blade.php welcome.blade.php
如無檔案夾 手動創建
記得修改模板所需的js css路徑
28、獲取已經登錄的用戶名
{{Auth::guard('admin')->user()->username}}
29、路由保護 語法:-> middleware(中間件名稱)
在web.php中需要保護的路由 如
Route::get('index/welcome','Admin\IndexController@welcome')->middleware('auth:admin');
Route::get('manager/index','Admin\Managercontroller@index')->middleware('auth:admin');
也可以分組如
Route::group(['prefix'=>'admin'],function () {
Route::get('public/login', 'Admin\PublicController@login')->name('login');
Route::post('public/check', 'Admin\PublicController@check');
Route::get('public/logout', 'Admin\PublicController@logout');
});
Route::group(['prefix'=>'admin','middleware'=>'auth:admin'],function () {
Route::get('index/index','Admin\IndexController@index');
Route::get('index/welcome','Admin\IndexController@welcome');
Route::get('manager/index','Admin\Managercontroller@index');
});
注意:a. 需要判斷是否登錄頁面全部都加上中間件的保護;
b. 在跳轉的時候,系統默認使用login路由別名,如果沒有則報“路由找不到”的錯誤,因此需要給登錄路由添加“login”別名;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71695.html
標籤:PHP
上一篇:PHP 創建GUID唯一標識
