Laravel 5 4 实现前后台登录
在官網(wǎng)下載 Laravel 5.4 配置并能在訪問
php artisan make:auth 復制代碼生成后路由文件 routes/web.php ,自動有
Auth::routes();Route::get('/home', 'HomeController@index'); 復制代碼運行
php artisan migrate 復制代碼執(zhí)行命令后會生成 users 表和 password_resets 表,既 用戶表和密碼重置表。可以測試用戶登錄,注冊,找回密碼功能。 ##自定義用戶表登錄 在 config/auth.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 選項。
'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,],], 復制代碼創(chuàng)建后臺用戶表和model
php artisan make:model Adminphp artisan make:migration creaet_admins_table 復制代碼在數(shù)據(jù)庫遷移文件 _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();}); 復制代碼執(zhí)行php artisan migrate ###生成臨時數(shù)據(jù) 在 database/factories/ModelFactory.php, 添加如下數(shù)據(jù):
$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條測試數(shù)據(jù),你要幾條就輸入多少(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',]; } 復制代碼###創(chuàng)建控制器
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()) {// 根據(jù)不同 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'); }); 復制代碼###視圖文件創(chuàng)建和修改 復制 resources\views\auth\login.blade.php,到 resources\views\admin\login\index.blade.php,修改表單提交地址
{{ url('/login') }} 改成 {{ route('admin.login') }} 復制代碼訪問 你的站點/admin/login
###另外知識點:
發(fā)現(xiàn)后臺經(jīng)常是用用戶名登錄的,而不是郵箱。
更改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> 復制代碼轉載于:https://juejin.im/post/5a333e6551882505d46073f6
總結
以上是生活随笔為你收集整理的Laravel 5 4 实现前后台登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到小猪崽子啥意思
- 下一篇: redis memcached Mong