LaraStore中的多表认证登录是如何实现的? 2016-10-22

larastore在研发之初,当时的Laravel版本是laravel4.2 默认不支持auth的多表认证!

也就是说:前台会员 和后台管理员都公用一个 users表。这样的弊端就是:后续再扩展前台用户权限会非常繁琐。

LaraStore的当前稳定版本中 使用的是LTS版本的Laravel框架。我们可以使用如下组件来实现。

composer require sarav/laravel-multiauth


安装完成后,在进行配置

在app/config.php 中 替换

"Illuminate\Auth\AuthServiceProvider::class"
//替换成下面的
"Sarav\Multiauth\MultiauthServiceProvider::class"


然后就是配置 guard相关的参数

app/auth.php中


这里我们配置了4个认证角色。分别是

【1】前台默认使用  user   对应的数据表  users

【2】前台供货商  supplier  对应的数据表是 supplier

【3】后台管理员  admin    对应数据表 admins

【4】前台能查看演示站的 demo用户   对应数据表  demo


然后 我们来查看下如何使用认证系统

//前台用户认证登录
\Auth::attempt("user", ['email' => 'johndoe@gmail.com', 'password' => 'password']);

//后台用户认证登录
\Auth::attempt("admin", ['email' => 'johndoe@gmail.com', 'password' => 'password']);

//供货商登录
\Auth::attempt("supplier", ['email' => 'johndoe@gmail.com', 'password' => 'password']);

//演示用户登录
\Auth::attempt("demo", ['email' => 'johndoe@gmail.com', 'password' => 'password']);


如何使用用户编号登录

//前台用户 使用用户编号登录
\Auth::loginUsingId("user", 1); // 

//其他角色用户依次类推
\Auth::loginUsingId("admin", 1); // 管理员登录

在模板中  判断用户是否登录

//判断前台用户是否登录
Auth::check('user')
//判断后台用户是否登录
Auth::check('admin')

//获取前台登录用户的姓名
Auth::user('user')->username;
//获取后台登录用户的姓名
Auth::user('admin')->username;


Laravel5.1中实现多表认证登录的方式 就是这样。到了Laravel5.3 ,其实系统默认已经支持多表认证了。

只需要配置 auth和guard的相关参数即可。

先配置 config/auth.php 中 providers 添加 admins这个 provider


然后配置guard


然后我们可以在控制器中来写登录逻辑

//后台用户登录
auth()->guard('admin')->attempt(['username'=>$username,'password'=>$password],true);

//前台用户登录
auth()->guard('user')->attempt(['username'=>$username,'password'=>$password],true);


在模板中 检测用户是否登录

//前台用户是否登录

if(auth()->gurad('user')->check())

//后台用户是否登录

if(auth()->guard('admin')->check())

模板中获取登录用户的信息

//前台用户登录后 获取登录用户名

auth()->guard('user')->user()->username;

//后台登录用户 获取登录用户名

auth()->guard('admin')->user()->username;


系统也为我们做好了一个登录认证的 auth组件 。只需要执行

php artisan make:auth

系统会自动生成 实例代码(包括 控制器 路由 模板) 这里就不再详细叙述了。


参考文档如下


【1】https://github.com/Sarav-S/Laravel-Multiauth

【2】https://laravel.com/docs/5.3/authentication

本文章为 LaravelStore官网原创 转载请注明出处。谢谢合作!