当前位置: 首页 > 知识库问答 >
问题:

php - laravel 如何在不使用sanctum中间件在控制器中获取用户信息?

程举
2023-09-30

我有一个api,需要在控制器中获取用户信息

这个api需要在登录 或者 不登录的情况下都能访问

如果我不加上 auth:sanctum 中间件则无法通过Auth::check()来验证用户是否登录

没有加上中间件 auth:sanctum , Auth::check() 方法始终返回的是false

我想在控制器中来验证用户信息而不是在中间件中验证直接返回401

望大佬解答

共有3个答案

黄扬
2023-09-30

去掉中间件,然后在控制器里面写。

$auth = \Illuminate\Support\Facades\Auth::guard('sanctum');

现在你就可以用这个 $auth->check()$auth->user() 来获取用户信息了。

弘涛
2023-09-30

header token 可以获取到的话,可以通过 token 解析

阚英武
2023-09-30

你可以使用 Laravel 的中间件链来解决这个问题。通过在中间件链中同时包含 auth:sanctumauth:api,你可以实现在登录或未登录的情况下都能访问你的 API。

具体步骤如下:

  1. 首先,你需要在中间件列表中添加 auth:sanctumauth:api。打开 App\Http\Kernel 类,找到 $routeMiddleware 数组,然后添加以下两行:
'auth.sanctum' => \Laravel\Sanctum\Http\Middleware\CheckFor認可token::class,'auth.api' => \Laravel\Sanctum\Http\Middleware\CheckFor認可token::class,
  1. 然后,在你的路由定义中,你可以使用 middleware 方法来应用这两个中间件。例如:
Route::middleware(['auth.sanctum', 'auth.api'])->group(function () {    // 在这里定义你的 API 路由});

这样,当你的路由被访问时,会先通过 auth.sanctumauth.api 中间件的验证。

如果你想在控制器中获取用户信息,你可以使用 auth 方法。例如:

if (Auth::check()) {    $user = Auth::user();    // 这里可以处理用户信息}

这样,无论用户是否已经登录,Auth::check() 都会返回正确的结果。而如果用户已经登录,Auth::user() 就会返回用户模型实例。

 类似资料:
  • 我正在尝试使用< code>Auth::user()- 我已经检查并包含了所需的文件,我正在从用户表中获取用户 我在调用变量并将其发布到控制器函数中的DB时遇到问题。任何帮助都可以。 将User表中的User发布到Tokens表的中,以便我可以使用模型 出现此错误: SQLSTATE[23000]:完整性约束冲突:19非空约束失败:令牌。user_id(SQL:插入“令牌”(“token1”、“t

  • 我试图设置cookie来定义用户首选的语言。我通过一个指向助手控制器的链接做到了这一点: /设置区域设置/{locale} 我知道这是正确的,因为如果我这样做: 它显示所选择的正确区域设置。所以下一步是使用中间件实际应用这个选择的语言环境,我把它命名为“设置语言环境”: 但如果我执行 在中间件中,它读取所有加扰的cookie。所以我的问题是为什么它会这样做,我如何从这里正确地读取cookie?

  • 请检查下面的代码,我用api写的。laravel 5.6中routes文件夹内的php页面当我运行此路由时,它不会返回控制器中的身份验证用户id,并将我重定向到主页。我已经通过php artisan make:auth创建了登录名

  • 问题内容: 我希望能够使用CURL读取SSL证书信息。从Linux控制台,我得到以下响应头: 但是使用CURL时,标头要短得多: 是否有可能获取这些信息,带有CURL或带有其他一些PHP函数的完整标头? 问题答案: 否。 编辑 :一个选项已添加到PHP 5.3.2。见http://bugs.php.net/49253 显然,该信息是由您的代理在响应标头中提供的。如果你想依靠这一点,你可以用卷曲的选

  • 我正在从NVP/SOAP PayPal API集成转向更新的REST API。 我以前的网站代码使用的是“快速结帐”流程。 网站发起付款,用户被重定向到贝宝; 用户登录并确认发起的支付; 用户被重定向到该网站,该网站调用PayPal以获得用户个人信息以保存在交易记录中(例如姓名、地址、...); 我的意思是,在onAuthorize回调方法中,我确实有用户授权支付的paymentID和payerI

  • 我已经创建了一个新的中间件名称Adminpanel 和注册中间件 和路线 }); 但当我运行时,它要求我尝试获取非对象的属性,这意味着我不能在这里访问Auth类,有人能告诉我错误是什么以及如何在中间件中访问Auth Facade吗。 这是我的身份验证码 谢谢