不知道对不对,乱来一下!!!!
1)laravel自带了一个用户认证系统,要使用的话,直接运行一下命令就可以用了
php artisan make:auth
会生成相应的控制器、路由和模版文件
2)数据迁移
php artisan migrate
会生成两个数据迁移文件和相应的数据表(users 和 password_resets 表)(要先配置好数据库连接)
3)多用户认证
如果只是需要完善一个用户资料字段,你只需要添加一个users表的数据迁移文件,再执行一下迁移就行了(看这里)
但如果想添加更多不同类型的用户(比如后台用户、商家用户等等),要怎么办呢?
4)修改用户认证配置(增加“守卫”和“服务提供者”)
打开 config/auth.php 配置看一下就知道什么是“守卫”了
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ],
很明显,所谓的“守卫”就laravel认证系统的端口,默认已经有两个“守卫”了,一个守web进口的,一个守api接口进口的
现在如果想添加一个后台“守卫”的话,就增加一个配置就行了(driver 表示认证系统用什么来驱动,provider 表示认证服务由谁的提供)
'admin' => [ 'driver' => 'session', 'provider' => 'admins', ],
上面配置了一个admins服务提供者,所以相应的,还需要在 providers(服务提供者)列表里添加一个配置
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], ],
5)配置是弄好,但提供服务的 Eloquent 模型还是不存在的,所以我们就来创建吧
php artisan make:model Admin --migration
--migration参数是同时生成相应的数据迁移文件的意思
Admin模型的内容大概是这样的:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AdminController extends Controller { public function __construct(){ $this->middleware('auth:admin'); } public function index(){ $user = Auth::user(); dd($user->email); return '后台!!!!'; } }
关键的地方是 $this->middleware('auth:admin'),关键laravel你要用的“守卫”是admin,否则打印的 Auth::user 将会是默认的前台用户信息
6)按自己的需求填一下数据迁移文件,再执行一下迁移(生成数据表)(这里演示的偷懒了,直接复制前台的用户表来玩的)
Schema::create('admins', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
php artisan migrate
7)添加访问路由,laravel5.3的auth路由在 /vendor/laravel/framework/src/Illuminate/Routing/Router.php 里的 auth 方法里
继续偷懒,直接复制前台路由,加一个后台路由组就行了,大概是这个样子:
$this->group(['prefix'=>'admin', 'namespace'=>'Admin', 'middleware'=>'adminview'], function(){ // Authentication Routes... $this->get('login', 'Auth\LoginController@showLoginForm')->name('login'); $this->post('login', 'Auth\LoginController@login'); $this->post('logout', 'Auth\LoginController@logout')->name('logout'); // Registration Routes... $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); $this->post('register', 'Auth\RegisterController@register'); // Password Reset Routes... $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm'); $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail'); $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm'); $this->post('password/reset', 'Auth\ResetPasswordController@reset'); });
可以看到,上面路由组里定义使用了一个Admin的命名空间和一个adminview的中间件,中间件的作用待会再说,我们先把命名空间下的控制器给搞定先~~
另外, routes/web.php 里一个后台前页的路由
Route::get('/admin','AdminController@index');
8)路由有了,但Admin命名空间下的路由还一个控制器还没有呢!!再再再偷懒,控制器也直接复制过去吧哈哈
LoginController 和 RegisterController 控制器里命名空间要改成
namespace App\Http\Controllers\Admin\Auth;
然后先说一下 RegisterController 控制器里的改动吧,有三处改动:
1、类头部把 use App\User 改成 use App\Admin;
2、redirectTo 属性值改成 protected $redirectTo = '/admin';
3、create 方法里把 User 模型改成 Admin 模型
完整的代码是这样的:
<?php namespace App\Http\Controllers\Admin\Auth; use App\Admin; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Validator; use Illuminate\Foundation\Auth\RegistersUsers; class RegisterController extends Controller { /* |-------------------------------------------------------------------------- | Register Controller |-------------------------------------------------------------------------- | | This controller handles the registration of new users as well as their | validation and creation. By default this controller uses a trait to | provide this functionality without requiring any additional code. | */ use RegistersUsers; /** * Where to redirect users after registration. * * @var string */ protected $redirectTo = '/admin'; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest'); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) { return Validator::make($data, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|confirmed', ]); } /** * Create a new user instance after a valid registration. * * @param array $data * @return User */ protected function create(array $data) { return Admin::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); } }