You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:44:14