Laravel 自定义portal_users表实现外部用户登录及角色权限方案咨询
问题1:指定认证校验数据表的实现方案
Laravel的认证逻辑通过Guard和用户提供者组合实现,默认调用users表对应配置,你可以按以下步骤配置外部用户专属的认证规则:
- 先创建对应
portal_users表的模型App\Models\PortalUser,继承Illuminate\Foundation\Auth\User类(和默认User模型父类一致),指定表属性:
protected $table = 'portal_users';
- 打开
config/auth.php新增自定义提供者和Guard:
return [ // 其他配置不变 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], // 新增外部用户专属Guard 'portal' => [ 'driver' => 'session', 'provider' => 'portal_users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // 新增外部用户提供者,绑定PortalUser模型 'portal_users' => [ 'driver' => 'eloquent', 'model' => App\Models\PortalUser::class, ], ], ];
- 修改外部用户的登录代码,指定使用
portalGuard校验:
public function store(Request $request) { $this->validate($request, [ 'email' => 'required|email', 'password' => 'required', ]); if(!auth()->guard('portal')->attempt($request->only('email', 'password'), $request->remember)) { return back()->with('status', '登录信息错误'); } return redirect()->route('portal.home'); }
后续调用外部用户的登录态也需要指定Guard,比如auth()->guard('portal')->user()获取当前登录的外部用户信息。
问题2:单表加角色 vs 多套认证逻辑选型
- 如果两类用户的字段重合度高、仅权限规则不同,推荐直接在默认users表新增role字段做角色区分,不需要单独建表和多套认证,后续通过中间件做权限拦截即可,维护成本更低。
- 如果两类用户的业务场景完全隔离、字段差异大、数据不允许混存,再选择多Guard多表的完全隔离认证方案。
内容的提问来源于stack exchange,提问作者Frevelman
相关产品推荐
相关产品推荐

