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

Laravel非默认数据库多用户创建及跨库登录问题求助

Laravel多用户表(非默认users)登录实现问题

已实现Laravel默认users表的用户登录功能,现在需基于Lansia模型对应的lansias表实现登录,遇到功能无法正常工作的问题,相关代码如下:

AuthController代码

public function loginAksi(Request $request)
{
    if ($request->email == null or $request->password == null) {
        return redirect()->back()->with(['error' => 'Masukkan Email atau Password !']);
    } else {
        if (Auth::attempt([ 'email' => $request->email, 'password' => $request->password ])) {
            $user = Auth::user();
            if($user->level == 1){
                return redirect()->route('admin.dashboard')->with(['success' => 'Selamat Datang']);
            } elseif($user->level == 0){
                return redirect()->route('user');
            } else {
                return redirect()->route('userlansia');
            }
        } else {
            return redirect()->back()->with(['error' => 'Login Gagal !']);
        }
    }
}

Lansia模型代码

protected $fillable = [
        'id_lansia',
        'nama_lansia',
        'tempat_lahir',
        'tgl_lahir',
        'alamat',
        'No_tlp',
        'NIK',
        'No_BPJS',
        'email',
        'password',
        'level',
        'user'  
    ];

protected $table = 'lansias';

protected $primaryKey = 'id_lansia';

auth.php配置

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    ],

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

kernel.php中间件配置

protected $routeMiddleware = [
      'admin' => \App\Http\Middleware\AdminMiddleware::class,
      'user' => \App\Http\Middleware\UserMiddleware::class,
      'userlansia' => \App\Http\Middleware\LansiaMiddleware::class,
];

解决方案步骤

1. 扩展auth.php配置,新增lansia的guard和provider

修改config/auth.php,添加针对lansias表的认证守卫和提供者:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    // 新增lansia守卫
    'lansia' => [
        'driver' => 'session',
        'provider' => 'lansias',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    // 新增lansias提供者
    'lansias' => [
        'driver' => 'eloquent',
        'model' => App\Lansia::class, // 对应你的Lansia模型路径
    ],
],

2. 调整Lansia模型,实现认证接口

Laravel的认证系统要求模型实现Authenticatable接口,修改Lansia模型:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable; // 引入认证基类

class Lansia extends Authenticatable
{
    protected $fillable = [
        'id_lansia',
        'nama_lansia',
        'tempat_lahir',
        'tgl_lahir',
        'alamat',
        'No_tlp',
        'NIK',
        'No_BPJS',
        'email',
        'password',
        'level',
        'user'  
    ];

    protected $table = 'lansias';

    protected $primaryKey = 'id_lansia';

    // 隐藏敏感字段(可选但推荐)
    protected $hidden = [
        'password', 'remember_token',
    ];
}

3. 修改登录逻辑,指定使用lansia守卫

在AuthController的loginAksi方法中,明确指定使用lansia守卫进行认证:

public function loginAksi(Request $request)
{
    $request->validate([
        'email' => 'required|email',
        'password' => 'required',
    ]);

    // 使用lansia守卫尝试登录
    if (Auth::guard('lansia')->attempt([
        'email' => $request->email, 
        'password' => $request->password
    ])) {
        $user = Auth::guard('lansia')->user();
        if($user->level == 1){
            return redirect()->route('admin.dashboard')->with(['success' => 'Selamat Datang']);
        } elseif($user->level == 0){
            return redirect()->route('user');
        } else {
            return redirect()->route('userlansia');
        }
    } else {
        return redirect()->back()->with(['error' => 'Login Gagal !']);
    }
}

4. 调整中间件(如果需要)

如果你的userlansia中间件需要验证当前登录的是lansia用户,修改中间件逻辑:

public function handle(Request $request, Closure $next)
{
    // 检查lansia守卫是否已认证
    if (!Auth::guard('lansia')->check()) {
        return redirect()->route('login');
    }
    return $next($request);
}

注意事项

  • 创建Lansia用户时,密码必须用Hash::make()加密存储,例如:
    Lansia::create([
        // 其他字段
        'password' => Hash::make('your_password'),
    ]);
    
  • 如果需要退出登录,要指定对应的守卫:Auth::guard('lansia')->logout();

内容的提问来源于stack exchange,提问作者Lanz King

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:43:15