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

Laravel8更新密码时出现SessionGuard::admin不存在错误

Laravel 8 管理员密码更新报错:Method Illuminate\Auth\SessionGuard::admin does not exist

在Laravel 8框架中更新管理员密码时触发该错误,核心原因是错误调用了不存在的admin()方法来获取管理员信息,以下是详细配置、错误代码及解决方案:

项目认证配置(auth.php)

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | 认证默认设置
    |--------------------------------------------------------------------------
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | 认证守卫
    |--------------------------------------------------------------------------
    */

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

    /*
    |--------------------------------------------------------------------------
    | 用户提供者
    |--------------------------------------------------------------------------
    */

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

        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Models\Admin::class,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | 密码重置
    |--------------------------------------------------------------------------
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
        'admins' => [
            'provider' => 'admins',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | 密码确认超时时间
    |--------------------------------------------------------------------------
    */

    'password_timeout' => 10800,
];

错误的控制器代码(Admin控制器UpdatePassword方法)

public function UpdatePassword(Request $request)
{
     $request->validate([
        'old_password' => 'required',
        'new_password' => 'required|confirmed',
    ]);

     if(!Hash::check($request->old_password, auth()->admin()->password)){
        return back()->with("error", "旧密码不匹配!");
    }
     
    // 注释中的代码同样存在错误:Auth::Admin() 写法不正确
    // $hashedPassword = Auth::Admin()->password;
    // if(Hash::check($request->old_password, $hashedPassword)){
    //     $admin = Admin::find(Auth::id());
    //     $admin->password = Hash::make($request->new_password);
    //     $admin->save();
    //     Auth::Logout();
    //     return redirect('admin')->with('status', '密码修改成功!');
    // }
    // else{
    //     return redirect()->back()->with('error', '操作出错!');
    // }
    // return redirect()->back()->with('status', '密码修改成功!');
}

错误分析与解决方案

错误根源

auth()->admin()是错误写法:Laravel的SessionGuard类没有admin()方法,默认auth()调用的是web守卫,要获取管理员信息,需要明确指定使用admin守卫。

修正后的完整代码

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

public function UpdatePassword(Request $request)
{
    $request->validate([
        'old_password' => 'required',
        'new_password' => 'required|confirmed',
    ]);

    // 获取当前登录的管理员(指定admin守卫)
    $admin = Auth::guard('admin')->user();

    // 验证旧密码
    if (!Hash::check($request->old_password, $admin->password)) {
        return back()->with("error", "旧密码不匹配!");
    }

    // 更新密码
    $admin->password = Hash::make($request->new_password);
    $admin->save();

    // 登出管理员并跳转
    Auth::guard('admin')->logout();
    return redirect('admin')->with('status', '密码修改成功!');
}

关键修正点

  1. 使用Auth::guard('admin')->user()或auth('admin')->user()获取当前登录的管理员,而非auth()->admin()
  2. 登出时需指定admin守卫,避免默认登出web守卫的用户
  3. 无需重新查询管理员模型,直接使用守卫返回的用户实例即可更新

内容的提问来源于stack exchange,提问作者MD. RONY AHMED

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:15:45