Laravel5.6 实现后台管理登录(自定义用户表登录)
生活随笔
收集整理的這篇文章主要介紹了
Laravel5.6 实现后台管理登录(自定义用户表登录)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、添加guard 認證驅動
'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\Models\Admin::class,],],復制代碼2、創建后臺用戶表和model
php artisan make:model Models/Admin -m復制代碼3、修改Admin模型類如下
<?phpnamespace App\Models;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',]; }復制代碼4、在數據庫遷移文件 _create_admins_table ,復制 users 遷移文件里的字段
public function up() {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\Models\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 tinker use App factory(App\Models\Admin::class,5)->create() //生成5條測試數據,你要幾條就輸入多少(Class,num) 復制代碼5、創建控制器
php artisan make:controller Admin/LoginController php artisan make:controller Admin/AdminController 復制代碼6、編輯 Admin/LoginController.php ,代碼如下:
<?phpnamespace App\Http\Controllers\Admin;use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Foundation\Auth\AuthenticatesUsers;class LoginController extends Controller {/*|--------------------------------------------------------------------------| Login Controller|--------------------------------------------------------------------------|| This controller handles authenticating users for the application and| redirecting them to your home screen. The controller uses a trait| to conveniently provide its functionality to your applications.|*/use AuthenticatesUsers;/*** Where to redirect users after login / registration.** @var string*/protected $redirectTo = '/admin';protected $username;/*** 用戶名登陸*/public function username(){return 'name';}/*** 多字段登錄并判斷狀態*/public function attemptLogin(Request $request){$username = $request->input('name');$password = $request->input('password');// 驗證用戶名登錄方式$usernameLogin = $this->guard()->attempt(['name' => $username, 'password' => $password,'status'=>1], $request->has('remember'));if ($usernameLogin) {return true;}// 驗證手機號登錄方式$mobileLogin = $this->guard()->attempt(['mobile' => $username, 'password' => $password,'status'=>1], $request->has('remember'));if ($mobileLogin) {return true;}// 驗證郵箱登錄方式$emailLogin = $this->guard()->attempt(['email' => $username, 'password' => $password,'status'=>1], $request->has('remember'));if ($emailLogin) {return true;}return false;}/*** Create a new controller instance.* @return void*/public function __construct(){$this->middleware('guest:admin', ['except' => 'logout']);$this->username = config('admin.global.username');}/*** 重寫登錄視圖頁面*/public function showLoginForm(){return view('admin.login');}/*** 退出到登錄頁面*/public function logout(Request $request){$this->guard()->logout();$request->session()->invalidate();return redirect('/admin/login');}/*** 驗證登錄*/protected function validateLogin(Request $request){$this->validate($request, [$this->username() => 'required|string','password' => 'required|string','captcha' => 'required|captcha',]);}/*** 自定義認證驅動*/protected function guard(){return auth()->guard('admin');} }復制代碼7、在 LoginController 中我們在構造函數中修改了 guest 中間件
- app\Http\Middleware\RedirectIfAuthenticated.php
8、編輯 Admin/AdminController.php ,代碼如下
<?phpnamespace App\Http\Controllers\Admin;use Illuminate\Http\Request;use App\Http\Requests; use App\Http\Controllers\Controller;class AdminController extends Controller {/*** Create a new controller instance.** @return void*/public function __construct(){$this->middleware('auth.admin:admin');}/*** Show the application dashboard.** @return \Illuminate\Http\Response*/public function index(){dd('后臺首頁,當前用戶名:'.auth('admin')->user()->name);} }復制代碼9、在 AdminController 構造函數中我們添加了一個 auth.admin Middlewar
php artisan make:middleware AdminAuth<?phpnamespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth;class AdminAuth {/*** Handle an incoming request.** @param \Illuminate\Http\Request $request* @param \Closure $next* @return mixed*/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);} }復制代碼10、在 app\Http\Kernel.php 中注冊:
protected $routeMiddleware = [......'auth.admin' => \App\Http\Middleware\AdminAuth::class,...... ];復制代碼11、在 routes/web.php 中添加如下路由:
Route::group(['prefix'=>'admin','namespace'=>'Admin'],function (){//后臺登陸退出Route::get('login', 'LoginController@showLoginForm')->name('admin.login');Route::post('login', 'LoginController@login');Route::post('logout', 'LoginController@logout')->name('admin.logout');//后臺首頁Route::get('/', 'AdminController@index')->name('admin.index');});復制代碼最后把提交地址的路由改成 {{ route('admin.login') }}
總結
以上是生活随笔為你收集整理的Laravel5.6 实现后台管理登录(自定义用户表登录)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: logstash解析系统的message
- 下一篇: SSD行业要变天了!因为这种闪存芯片要来