Laravel 5.5:使用自定义模型而非users表实现身份验证
嘿,我来帮你搞定这个问题!要在Laravel里完全切换到自定义模型做身份验证(而不是只改默认User模型的表名),其实只需要调整几个关键配置文件就行,步骤很清晰:
切换Laravel身份验证到自定义模型的完整步骤
1. 先创建你的自定义模型
首先得有自己的身份验证模型,比如Admin.php,记得要继承Laravel的基础认证类,这样才能拥有身份验证的核心功能:
namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class Admin extends Authenticatable { use Notifiable; // 可选:如果你的表名不是模型的复数形式,在这里指定 protected $table = 'admins'; // 配置可批量赋值的字段 protected $fillable = [ 'name', 'email', 'password', ]; // 配置隐藏字段 protected $hidden = [ 'password', 'remember_token', ]; }
2. 修改核心身份验证配置文件
打开config/auth.php,这是控制整个身份验证逻辑的核心文件,需要调整3个关键部分:
调整defaults(可选但建议)
如果你的应用默认要使用新模型做认证,修改默认的guard和密码重置配置:
'defaults' => [ 'guard' => 'web', // 或者改成你自定义的guard名,比如'admin' 'passwords' => 'admins', // 对应下面passwords里的配置项 ],
调整guards数组
找到对应的guard(比如默认的web),把它关联的provider改成你自定义的名称:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'admins', // 这里改成自定义的provider名 ], // 也可以新增一个独立的guard,比如专门给后台用户用的 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], ],
调整providers数组
添加或修改provider,指定你的自定义模型路径:
'providers' => [ // 可以保留默认的users provider(如果还需要前台用户认证) 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // 新增你的自定义provider 'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, // 这里指向你的自定义模型 ], ],
调整passwords数组(如果需要密码重置功能)
如果你的自定义模型需要密码重置功能,添加对应的配置项:
'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], 'admins' => [ 'provider' => 'admins', 'table' => 'admin_password_resets', // 可以用单独的表,也可以复用原表 'expire' => 60, ], ],
3. 调整认证控制器(如果用了默认Auth脚手架)
如果你用php artisan make:auth生成了默认的认证控制器(比如LoginController、RegisterController),需要在这些控制器里指定使用的guard:
比如在LoginController.php中:
use Illuminate\Support\Facades\Auth; // 重写guard方法,指定使用自定义的guard protected function guard() { return Auth::guard('admin'); // 对应config/auth.php里的guard名 } // 可选:自定义登录后的跳转地址 protected $redirectTo = '/admin/dashboard';
同样,RegisterController、ForgotPasswordController等也要做类似调整,确保它们关联到你的自定义模型。
4. 清除配置缓存(重要)
修改完配置文件后,一定要清除配置缓存,让新配置生效:
php artisan config:clear
额外注意事项
- 确保你的自定义模型对应的数据库表有必要的字段:
email(或你用来认证的字段)、password、remember_token(如果用“记住我”功能),以及created_at/updated_at时间戳字段。 - 如果需要用
username代替email做认证,可以在自定义模型里重写username()方法:
public function username() { return 'username'; }
内容的提问来源于stack exchange,提问作者manifestor
相关产品推荐
相关产品推荐

