如何在控制器中获取 User()->id (Laravel 8+)

6
我正在尝试通过 user('id') 选择任务,但我不能在从 DB 中选择数据的 Controller 中获取它。 我尝试了很多方法,其中一些来自 stackoverflow,但它们都不起作用。
我尝试过:
1. $userId = Auth::check() ? Auth::id() : true;
2. Auth::user()->id;
3. public function getUserId(){
   
   on Model} - and then get this value on Controllers

还有其他的一些东西

我有最简单的代码:

  1. 我安装了注册: npm artisan ui --auth 之类的命令
  2. 我在 Laravel 上安装了 vuejs
  3. 我在 Laravel 上创建了一个 api,并且在 vue 上编写了一些逻辑

我没有去修改 "app.blade.php",它和原来一样。

我可以在文件 "app.blade.php" 中获取数据,比如用户的名称、ID,以及其他我想要的所有内容,但是我需要这些数据在文件夹->文件App\Http\Controllers{{SomeController}} 中使用,但是我不知道怎么做。

有人遇到过类似的情况吗? 我该如何在 Controllers 中获取用户 ID?

谢谢大家的帮助。


使用\Auth::guard('web')->user(); - Reza sh
我忘了,当我在控制器中尝试检查注册时,如 Auth::check(),返回的是 false,但是我已经登录了。 - K.Igor
如果你建议使用这段代码替代 Auth::id() 或 Auth::user()->id,但它并没有起作用或者我漏掉了什么。 - K.Igor
3个回答

16

如果您需要用户ID,请使用以下任意一个:

auth()->id();

使用Auth门面

\Auth::id();

或者,使用Request实例

$request->user()->id

按照这个简单的控制器代码进行操作,我在此展示了3种不同的方法:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class SomeController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function getUserId(Request $request)
    {
        $user = Auth::user(); // Retrieve the currently authenticated user...
        $id = Auth::id(); // Retrieve the currently authenticated user's ID...

        
        $user = $request->user(); // returns an instance of the authenticated user...
        $id = $request->user()->id; // Retrieve the currently authenticated user's ID...

        
        $user = auth()->user(); // Retrieve the currently authenticated user...
        $id = auth()->id();  // Retrieve the currently authenticated user's ID...
    }
}

我有两个守卫:1)用户 2)管理员。如果两者或任何一个已登录,则如何获取已登录的前端用户或管理员用户信息?auth()->guard('admin')->email()无效。请建议。谢谢。 - Kamlesh

2
Auth::user()->id;

如果您尝试获取它的控制器方法上有Auth中间件,那么这应该可以工作,请检查是否已添加该中间件。 要进行检查,可以使用php artisan route:list命令。

是的,当我像你说的那样通过命令php artisan route:list检查时,在“Middleware”列中我有授权。 - K.Igor
当我尝试使用Auth::user()->id;时,Laravel会提示在Auth中找不到"id"。 - K.Igor
@K.Igor,\Auth::user() 的输出是什么? - Vahe Galstyan
如果我在“app.blade.php”中输出,则返回带有用户数据的数组。如果我尝试从控制器到vuejs获取Auth :: user()中的数据,并在console.log()上,则会获得带有后向请求的对象,例如:headers,status,statusText等等... - K.Igor
我已经尝试通过路由和控制器在页面上输出“Auth :: user()”,但是它显示为空。 - K.Igor

1

如果还有人在寻找这个问题的答案,我可以解释一下如何做。

Laravel 有一个路由器,通过该控制器路由授权过程,因此您应该将该过程重定向到您的路由器,并在控制器中创建一个构造函数,允许您获取用户ID

如何做到这一点?:

1. 首先,您应该找到负责授权和注册用户的控制器路由。在我的情况下,它是: a) App\Http\Controllers\HomeController b) routes\web.php

2. 其次,您应该将您的授权路由器重定向到您尝试获取Auth :: id()控制器。在我的情况下,它是: App\Http\Controllers\TasksController

因此,在routes\web.php中,我做了这个:

    //was
Route::get('/', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
    //was
    Auth::routes();
    //was
    Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
    //added
    Auth::routes();
    //added
    Route::get('/home', [App\Http\Controllers\TasksController::class, 'index'])->name('home');

也许你应该在那个控制器上加上索引功能。 第三步,在你想要获取用户ID的控制器中添加构造函数。我从HomeController中取出了这个构造函数,因为它已经存在于那里。在我的情况下,它是:
    public function __construct()
    {
        $this->middleware('auth');
    }

在我的TasksController中有带有函数的代码:

    public function __construct()
    {
        $this->middleware('auth');
    }
       
    public function index()
    {              
        $userId = Auth::check() ? Auth::id() : true;       
    }

现在我可以获取用户ID。 PS:我在控制器TasksController中的顶部添加了构造函数

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接