繁体   English   中英

laravel 8 如何使用不记名令牌获取用户 ID

[英]laravel 8 how to get user id using bearer token

我正在使用 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 中间件,我将无法以访客身份访问它,所以我如何根据标头中发送的承载令牌获取用户 ID 或用户?

尝试这个

if(!empty(request()->user())){ // Define user logged in
  $fav=UserFav::where('user_id',request()->user()->id)->where('project_id',$id)->get();
} else {
  $fav=UserFav::->where('project_id',$id)->get();
}

if(!$fav->isEmpty()) {
  $is_fav=true;
}

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();
}

我用的是护照而不是密室,我的做法是

auth('api')->user()->id

或者

$request->user()->id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM