【问题标题】:Auth::id() returns null laravelAuth::id() 返回 null laravel
【发布时间】:2019-02-02 23:15:24
【问题描述】:

我有一个函数

public function index(){
   $users = User::doesntHave('roles')->latest()->paginate()->except(Auth::id());
   return UsersResource::collection($users);
}

当我 dd Auth::id() 时,即使我在控制器上声明了 auth 外观,它也会返回 null

use Illuminate\Support\Facades\Auth;

这是我的路线,存储在api.php

Route::resource('users','Users\AdminUsersController')->except([
    'create', 'edit'
]);

【问题讨论】:

  • 你使用的是哪个版本的 laravel?
  • 查看Auth::user()->id
  • 你的路由应该有 auth 中间件或在你的控制器中 __construct $this->middleware('auth');
  • 先生,我稍后再试试。即使在 api 路由内部也能正常工作吗?
  • 在api的情况下你必须使用auth:api

标签: php laravel laravel-5


【解决方案1】:

您是否已登录。听起来不像。

不要使用 Illuminate\Support\Facades\Auth;相反,它只是 use Auth;.

您可以执行以下操作:

auth()->check(); // this checks to see if you're logged in

$userId = auth()->check() ? auth()->id() : null;

auth()->id(); // this is the same as Auth::id();

auth()->user();

【讨论】:

  • "不要使用 Illuminate\Support\Facades\Auth;" 为什么不呢?
【解决方案2】:

auth:api 中间件中添加您的身份验证保护路由

Route::post('login','LoginController@login');

Route::middleware(['auth:api'])->group(function () {

    Route::resource('users','Users\AdminUsersController')->except([
    'create', 'edit'
    ]);

    //other authenticated Routes goes inside this block

}); 

对于 Api 身份验证,我建议您查看 https://laravel.com/docs/5.6/passport

【讨论】:

  • 先生,它说未经身份验证的状态 401 我需要安装护照吗?
  • @Beginner 是的,需要安装 laravel 护照,然后需要生成 accessToken 然后在 header 中发送该令牌。你可以看看这个stackoverflow.com/questions/50848892/…
  • 先生,对不起,这是我第一次实施护照,我总是跳过这个,因为我不知道从哪里开始。例如,我有一个生成访问令牌的登录控制器。所以在我登录时的路由中,我现在已经可以使用 auth:api 中间件并能够使用我自己的 api 了吗?本地主机/应用程序/公共/api/用户? w/o 获得 401 状态?谢谢先生
  • 是的,将您的登录控制器放在auth:api 中间件路由块更新答案之外。登录并生成accessToken 后,然后在Authorization 标头中使用此accessToken,如Authorization: Bearer accessToken 调用所有受保护的api。旁注最好将虚拟主机用于 laravel 应用程序。在这里查看ourcodeworld.com/articles/read/584/…
  • 是的,对于所有请求,您必须附加 Authorization 标头和 accessToken 值。是的,您可以将其存储在本地存储中。请记住$user->createToken('Token Name')->accessToken 生成个人令牌并且它没有过期时间,因此您必须在注销 api 或类似的东西中撤销它。最好从答案中的链接中阅读文档
【解决方案3】:

$users = User::doesntHave('roles')->latest()->paginate()->except(Auth::user()->id);

【讨论】:

    猜你喜欢
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2017-03-17
    • 2023-02-04
    • 2019-09-20
    • 2016-05-13
    相关资源
    最近更新 更多