首页 > 解决方案 > laravel 8如何使用不记名令牌获取用户ID

问题描述

我正在使用 laravel 8,无论使用令牌还是不使用令牌,我都需要访问其中一个 API 路由,例如,我有一个帖子页面,如果用户已登录,我想检查他是否喜欢该帖子,但如果他没有登录我只是显示帖子。

我编写了以下代码,但出现错误 500

$bearer=$request->header('Authorization');
if(isset($bearer)){
            
            $fav=UserFav::where('user_id',request()->user()->id)->where('project_id',$id)->get();
            if(!$fav->isEmpty())
            $is_fav=true;
        }

错误信息是

尝试在 null 上读取属性 id

我理解它说 request()->user() 正在返回 null 的消息,这是因为该路由不在 sanctum 中间件中

但是如果我将路由放到 sanctum 中间件,我将无法以访客身份访问它,那么我如何根据标头中发送的不记名令牌获取用户 ID 或用户?

标签: phplaravellaravel-sanctum

解决方案


Auth::check 会告诉你用户是否通过了身份验证,即使你使用的是 Brearer 令牌

use Illuminate\Support\Facades\Auth;

$is_fav = false;
if(Auth::check()) {
    $is_fav = UserFav::where('user_id',Auth::user()->id)
                 ->where('project_id',$id) 
                 ->exists();
}


推荐阅读