【问题标题】:Get Auth User ID Laravel获取身份验证用户 ID Laravel
【发布时间】:2022-01-02 06:02:35
【问题描述】:

我制作了 Laravel 项目并安装了 Breeze 包以进行多重身份验证并创建一个警卫呼叫管理员以控制用户对仪表板的评估它工作正常这是路线

Route::get('/dashbord',[AdminController::class, 'Dashbord'])
    ->name('admin.dashbord')
    ->middleware('Admin');

Route::get('/profile/edit',[AdminProfileSettings::class, 'index'])
    ->name('admin.profile.settings')
    ->middleware('Admin');

这是中间件

public function handle(Request $request, Closure $next)
{
    if(!Auth::guard('admin')->check()) {
        return redirect()->route('login_form')->with('error','please Login First');
    }
    return $next($request);
}

此代码工作正常,但问题是当我登录仪表板并尝试将管理员 ID 获取到 admin.profile.settings 路由时它不会获取 ID,我通过使用像这样的 AdminProfileSettings 控制器传递了记录的管理员 ID

public function index()
{
    $id=Auth::user()->id;
    $adminData = Admin::find($id);
    return view('admin.admin_profile_settings',compact('adminData'));
}

但是,当我尝试在 admin.admin_profile_settings 视图中访问它时,它会显示此错误:

试图获取非对象的属性“id”

但是,如果我使用$adminData = Admin::find(1);,它会毫无问题地获取 ID,但是当我尝试获取身份验证用户 ID 时,它会显示错误,如果我使用默认保护登录,则不会显示此错误,但它会得到 @来自用户表的 987654326@

【问题讨论】:

    标签: laravel authentication breeze


    【解决方案1】:

    你没有使用auth:admin 中间件,所以Auth 门面将把用户从配置中定义的默认保护中拉出来(这是web,除非你改变了它)。

    不使用auth:admin 中间件,您需要指定获取用户的守卫。

    $adminUser = Auth::guard('admin')->user();
    

    注意 1:如果您有 $request 变量,您还可以使用 $request->user() 将用户从 $request 中拉出来,而不是使用 Auth 外观。这只是一个偏好问题。如果需要,user() 方法还可以将守卫作为参数。

    $adminUser = $request->user('admin');
    

    注意 2:user() 方法(Auth 和 request)返回完全水合的模型。无需获取 id 并重新检索模型。

    【讨论】:

      猜你喜欢
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 2018-08-31
      • 2019-10-10
      • 2018-11-26
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多