laravel为我们提供了登录模块,但开发过程中难免遇到前后端不通登录页面、不通用户表的情况,这时我们将要自己再写一个登录的controller
在这我们先看一下原来的登录模块是怎么登录的
vendor\laravel\framework\src\Illuminate\Routing\Router.php
不难看出路由将get与post请求分别发给了LoginController中的showLoginForm、login两个方法处理,
打开LoginController,发现里面并没有showLoginForm、login两个方法,但使用一个trait —AuthenticatesUsers
打开AuthenticatesUsers,很快就能找到showLoginForm,login
因此,我们在写自己的登录时,通过use AuthenticatesUsers即可。
正式开始:
1、创建我们自己的登录控制器
php artisan make:controller Backend\LoginController
此时在Backend目录下创建了一个LoginController控制器
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
//引入trait
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Auth;
class LoginController extends Controller
{
//使用trait
use AuthenticatesUsers;
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
$this->middleware('guest.manager')->except('logout');
}
// 修改验证的用户,默认的是邮箱,你懂的,我这里改成了电话tel,注意自己用啥就改成啥
public function username()
{
return 'tel';
}
// 修改showLoginForm返回的页面(自己的登录页面,我的登录页面在view\backend\auth\login.blade.php)
public function showLoginForm()
{
return view('backend.auth.login');
}
// 修改guard,这里请结合文档验证“自定义 Guard”来看,介绍的很清楚
protected function guard()
{
return Auth::guard('manager');
}
// 默认的登录页面是home,这里修改为我们自己的路由
protected function redirectTo()
{
return '/test';
}
}
自定义 Guard
在 config/auth.php 中添加在的guard
我的
添加了一个providers,名字叫manager,这个manager provider用的驱动是eloquent,对应的模型是Manager,模型所在名称空间是 App\Model
'manager' => [
'driver' => 'eloquent',
'model' => App\Model\Manager::class,
],
添加完成如下
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
//
'manager' => [
'driver' => 'eloquent',
'model' => App\Model\Manager::class,
],
//想用database就按下面这种写法写
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
我添加了一个guard 名字叫manager,这里名字随便取也可以叫abc
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
//自己添加的guards,名称为manager,也可以叫abc,随你,这个名称在哪用到呢?下面讲
'manager' => [//如果你填的是abc,loginController中就填abc
'driver' => 'session',
'provider' => 'manager',//这里要与上面providers中添加的名称一致
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
guard名称就在我们自己写的loginController中这里用到
protected function guard()
{
return Auth::guard('manager');//如果你取名是abc,这里就填abc,不填默认为web
}
接下来我们要创建一下我们的用户表与用户表对应的模型
表我们就直接复制users表了,改成自己的命名称manager,
创建模型Manager
php artisan make:model Model\Manager
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
//在用户模型中需要修改一下继承关系,文档中写的,要深究自己去研究
use Illuminate\Foundation\Auth\User;
//原来是继承Model,改成继承User
class Manager extends User
{
//天机按对应关系
protected $table='manager';
//将黑名单设置为空
protected $guarded=[];
//设置主键
protected $primaryKey='id';
//这里根据自己的需要修改,自动维护时间戳true或false
public $timestamps=true;
}
最后
路由,自己的写在哪就自己改改位置
//访问登录页面
Route::get('manager','Backend\LoginController@showLoginForm');
//处理登录请求
Route::post('manager','Backend\LoginController@login');
//自己随便加的登录成功跳转路由,改成你自己的home页
Route::get('/test',function (){
return "1111";
});
你也可以在B站上看视频
B站视频