• laravel 多用户认证 架构

背景

项目包含若干子站点,不同站点功能各异,但共享底层数据及逻辑。公用同一个Auth 中间件来进行多用户登录。用意是最大限度利用 Laravel 自带的认证系统。不过默认的认证都是根据 『email』和『password』字段进行的。之后有时间可能再追加自定义字段比如『phone』的改造方案。

具体方案

项目按照不同站点组织成不同模块,在 Laravel 原有目录结构基础内,分别给各个站点创设目录。

laravel 5.5 project
├── app
│   └── Http
│       └── Controllers
│           ├── Admin                  后台目录
│           │     ├── IndexController
│           │     └── LoginController
│           ├── Home                   前台目录
│           │    └── IndexController
│           └── Auth                   laravel自带的认证目录
└── resources└── views├── admin├── auth└── home复制代码

本文以 Admin 为例进行说明,如需增加其他站点,进行类似改动即可。

上面的目录是我们最终的目录 其中 Auth 目录 是通过 命令生成:

    php artisan make:auth
复制代码

运行命令以后就会生成一套权限系统, 然后 打开路由(web.php) 文件 会看到:

Auth::routes();
Route::get('/home','HomeController@index')->middleware('auth');复制代码

访问 项目 /home 则会跳转到 登录

接下来 我们 把这个路由改造一下, 首先改造路由:

Auth::routes();
Route::get('/','Home\IndexController@index')->middleware('auth');复制代码

系统默认的是使用 emial 登录的 ,如果需要使用用户名登录 则 需要打开 :

上面所提到的Controller 下 Auth 目录中的 LoginController.php 在里面重写:

public function username(){return 'name';}
复制代码

重写跳转

protected $redirectTo = '/';复制代码

控制器写完 接下来 修改一下 login 的页面 英文的换 中文 就不说了

ok 上面修改完毕以后 我们把系统自带的 认证当做 我们的前台用户的认证 接下来我们开始改造后台认证

开始 自定义 guard

  • 打开config中的 auth.php,代码如下:
'guards' => ['web' => ['driver' => 'session','provider' => 'users',],'api' => ['driver' => 'token','provider' => 'users',],//这个admin是自定义的guards  如果有多个认证 可以写多个'admin' => ['driver' => 'session',   //这个是使用的驱动'provider' => 'admins',  //这个是你自定的  所对应的是下面的这个],],'providers' => ['users' => ['driver' => 'eloquent','model' => App\User::class,],//这个是定义的 providers'admins' => ['driver' => 'eloquent','model' => App\Model\Admin::class, //这个是自定义的Modle类]]复制代码

上面 App\Model\Admin::class 中的 Admin 是我 后台用户表 叫做 amdin

  • 开始建model类
php artisan make:model Model/Admin
复制代码

运行完毕,就会看到:

laravel 5.5 project├── app└──Model└──Admin.php复制代码

其中 Admin.php 的代码内容是:


<?phpnamespace App\Model;use Illuminate\Notifications\Notifiable;use Illuminate\Foundation\Auth\User as Authenticatable;class Admin extends Authenticatable{use Notifiable;protected $fillable = ['name', 'password',    //你要验证的字段];/*** 数组隐藏的属性** @var array*/protected $hidden = ['password', 'remember_token',];}
复制代码

写完Model以后 重点开始 :

写路由

/** 前端路由开始  ***/
Auth::routes();
Route::get('/','Home\IndexController@index')->middleware('auth');/** 前端路由 结束 **//** 后台登录 **/
Route::get('admin/login','Admin\LoginController@showLoginForm');
Route::get('admin/logout','Admin\LoginController@logout')->name('admin-logout');
Route::post('admin/login','Admin\LoginController@login')->name("admin-login");/** 后台路由 **/
Route::group(['prefix'=>'admin','middleware'=>'auth:admin'],function () {Route::get('/','Admin\IndexController@index');
});复制代码

写后端登录验证:

上面路由中 我们看到 有 LoginController 控制器 所以 命令行走起:

    php artisan make:controller Admin/LoginController
复制代码

运行完毕以后 打开: app/Http/controller/Admin/LoginController.php 开始写验证:代码是

<?phpnamespace App\Http\Controllers\Admin;use Illuminate\Http\Request;
use App\Http\Controllers\Controller;class LoginController extends Controller
{// 展示后台登录的页面public function showLoginForm(){return view('admin.login');}//处理登录操作public function login(Request $request){//auth('admin') 你自定义的grude  attempt(['要验证的字段'=>'发送过来的值'])$res = auth('admin')->attempt(['name' => $request->get('name'), 'password' => $request->get('password')]);//返回 bool值if ($res) {return redirect('admin');} else {return redirect('admin/login');}}//退出public function logout(){auth('admin')->logout();return redirect('admin/login');}
}复制代码

如上代码所示 登录成功以后 就可以通过redirect 跳转

写http请求处理:

找到Exceptions 目录下的 Handler.php 文件 重写 下面方法:

<?phpprotected function unauthenticated($request, AuthenticationException $exception){if ($request->expectsJson()) {return response()->json(['error' => 'Unauthenticated.'], 401);}if(empty($exception->guards())){return redirect()->guest('login');}//中间件各模块之间跳转问题return redirect()->guest($exception->guards()[0].'/login');}
复制代码

Ok 至此后台登录也写完毕了

在后台首页中如何如何获取登录的用户的信息

$users = auth()->user();dd($users);就会看到用户的信息
复制代码

转载于:https://juejin.im/post/5a6adf576fb9a01ca47ab784

Laravel 多用户认证相关推荐

  1. Laravel 用户认证与登陆

    先看看laravel 自带的用户认证 1.laravel 有内置了用户认证的控制器,它们被放置在 App\Http\Controllers\Auth RegisterController 处理用户注册 ...

  2. 【国际专场】laravel多用户平台(SaaS, 如淘宝多用户商城)的搭建策略

    想不想用Laravel来搭建一个多用户.或多租户平台?比如像淘宝那样的多商户平台呢?听上去很复杂,不是吗?怎么能一个程序,给那么多的机构用户来用呢?如何协调管理它们呢?数据库怎么搭建呢,是每个商户一个 ...

  3. laravel auth.php,Laravel 用户认证 Auth

    很多应用是需要登陆后才能操作,Laravel提供了一个auth工具来实现用户的认证功能.并且有一个config/auth.php来配置auth工具.大概看一下auth工具的常用方法 Auth::che ...

  4. [laravel]laravel用户认证及api认证,session,cookie,api_token

    我们开始制作完哪个站的时候第一个想要做的就是用户的问题,但是用户的问题说难不难,说简单也不简单,对于网页端,保存用户信息需要考虑使用的session,还是cookie,也有的公司使用token的,既然 ...

  5. Laravel 用户认证中 attempt方法

    $credentials = request(['name', 'password']); if (!$token = auth('api')->attempt($credentials)) { ...

  6. Laravel核心代码学习--用户认证系统(基础介绍)

    用户认证系统(基础介绍) 使用过Laravel的开发者都知道,Laravel自带了一个认证系统来提供基本的用户注册.登录.认证.找回密码,如果Auth系统里提供的基础功能不满足需求还可以很方便的在这些 ...

  7. Laravel核心解读 -- 用户认证系统(基础介绍)

    用户认证系统(基础介绍) 使用过Laravel的开发者都知道,Laravel自带了一个认证系统来提供基本的用户注册.登录.认证.找回密码,如果Auth系统里提供的基础功能不满足需求还可以很方便的在这些 ...

  8. php登录改为用户名,Laravel 认证脚手架改为使用用户名登录

    新建一个名为 project 的 laravel 项目 composer create-project --prefer-dist laravel/laravel project cd project ...

  9. 安全系列 —— 在 Laravel 中实现用户注册登录认证

    简介 注:想要快速上手?只需要在新安装的 Laravel 应用下运行 php artisan make:auth 和 php artisan migrate,这两个命令会生成用户登录注册所需要的所有东 ...

最新文章

  1. Windows保护模式学习笔记(十)—— TLB
  2. WebRTC 系列之音频会话管理
  3. python get post区别_大话Python, webpy教程之GET和POST区别
  4. 新一代人工智能发展规划_助力人工智能创新发展,新华三任合肥市新一代人工智能产业发展联盟理事单位...
  5. Hibernate中的三种数据持久状态和缓存机制
  6. c 语言调用纯汇编函数 1
  7. linux python开发identifier,python程序设计 浙大版
  8. [导入]MsAjax Lib- Date.parseInvariant 函数
  9. c语言中++b与b++_C ++中的朋友功能
  10. rabbitmq-web-stomp 优化过程
  11. list是否包含字符串_Python创建list
  12. 实现类似shared_ptr的引用计数
  13. 计算机进管理提示找不到入口,如何解决Win10提示找不到入口点dllregisterserver
  14. 【专栏】腾讯产品:写给产品经理和设计师的用户体验知识3
  15. **任务一 WEB学习 笔记**
  16. 手表频率测试软件,石英钟表测试仪是一款测量石英钟的灵活的工具
  17. Linux keypad 设备树,GitHub - bilibilifmk/rpi_mt: 树莓派移动终端 全键盘及2.4寸tft材质屏幕...
  18. AI智能抠图工具--头发丝都可见
  19. 请求servlet操作成功后,在JSP页面弹出提示框
  20. android Web App开发

热门文章

  1. 内存监控及报警shell脚本
  2. 菜鸟学SSH(十五)——简单模拟Hibernate实现原理
  3. Go语言JSON与Byte[]转化
  4. H3CNE新版本V6.0与旧版本V5.1的区别
  5. PHP实现多服务器session共享之NFS共享
  6. Js 模拟鼠标点击事件
  7. Android手机摇一摇的实现SensorEventListener
  8. 《小马哥Spring Cloud系列》十五:分布式应用追踪-视频笔记
  9. linux学习笔记-9.查找
  10. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件