Laravel Auth::user()在API控制器中返回Null

Laravel Auth::user()在API控制器中返回Null,laravel,Laravel,我使用的是Laravel7,我的问题是从Auth::user获取null; auth->user和auth::id也返回null 顺便说一句,在balde模板中Auth::user工作。 当我尝试在控制器中使用它时,它返回null 我要做的是在后端Vuejs中创建一个评论页面,我想建立一个过滤器逻辑。为了做到这一点,我想在控制器中的每个注释中添加一个名为repliedBy的新属性。如果当前用户未回复评论,则repliedBy将为notByMe。因此,我不会尝试将用户id返回到Vuejs。我甚至在

我使用的是Laravel7,我的问题是从Auth::user获取null; auth->user和auth::id也返回null

顺便说一句,在balde模板中Auth::user工作。 当我尝试在控制器中使用它时,它返回null

我要做的是在后端Vuejs中创建一个评论页面,我想建立一个过滤器逻辑。为了做到这一点,我想在控制器中的每个注释中添加一个名为repliedBy的新属性。如果当前用户未回复评论,则repliedBy将为notByMe。因此,我不会尝试将用户id返回到Vuejs。我甚至在控制器里也找不到身份证。顺便说一句,登录、注册等工作正常

这是我的评论控制器:

公共功能指数 { $comments=Comment::joinsite\u语言,语言\u id,=,site\u语言.id ->选择内容\注释。*,网站\语言。速记为语言速记 ->带有[回复、帖子、用户] ->orderBy'id','desc' ->得到 ->groupBycommentable_类型; $grouppedComments=[]; foreach$注释为$type=>$typeSet{ $newType=strtolowerexplode\\,$type[1]; $grouppedByLanguage=$typeSet->groupBylang\u速记; $langSet=[]; foreach$grouppedByLanguage为$lang=>$commentSet{ $grouppedBycontent=[]; foreach$commentSet为$comments{ $content=$newType.\u.$comments->commentable\u id; 如果数组\键\存在$content,$grouppedBycontent{ 数组\u push$grouppedBycontent[$content],$comments; }否则{ $grouppedBycontent[$content]=[$comments]; } } $groupAfterOrganized=[]; foreach$grouppedBycontent作为$content=>$comments{ $order=1; $commentAndReplies=[]; foreach$comments作为$comment{ 如果$comment->parent_id==null{ 如果设置为$comment->order==false | |$comment->order>$order{ $comment->order=$order; } 数组_push$commentAndReplies$comment; }否则{ foreach$comments作为$parentComment{ 如果$parentComment->id===$comment->parent\u id{ $parent=$parentComment; 打破 } } foreach$parent->作为$replyInParent答复{ 如果$replyInParent->id===$comment->id{ $reply=$replyInParent; 打破 } } 如果设置为$comment->order==false{ $comment->order=$order; $order++; } 如果设置为$parent->order==false | |$parent->order>$comment->order{ $parent->order=$comment->order; } $reply->order=$comment->order; $reply->replies=$comment->replies; $reply[$newType]=$comment[$newType]; $basePower=6; 如果$comment->user_id!==null{ 如果$comment->user_id===Auth::id{ $reply->replyFrom=me; }否则,如果$comment->user->role->power>=$basePower{ $reply->replyFrom=员工; }否则{ $reply->replyFrom=用户; } }否则{ $reply->replyFrom=访问者; } $iReplied=false; $staffresponsed=false; foreach$reply->答复为$replyOfReply{ 如果$replyOfReply->user\u id!==null{ $power=$replyOfReply->user->role->power; 如果$power>=$basePower{ $StaffResponsed=true; } } 如果$replyOfReply->user\u id===Auth::id{ $iReplied=true; } } 如果$StaffResponsed==false{ 如果$reply->replyFrom==用户&&$reply->replyFrom==访问者{ $reply->repled=notrepled; }否则{ $reply->repled=lastWords; } }否则,如果$StaffResponsed&&$iReplied===false{ $reply->reply=notByMe; }否则,如果$Staffer回答{ $reply->repled=回复; } } } $groupAfterOrganized[$content]=$commentAndReplies; } $langSet[$lang]=$groupAfterOrganized; } $grouppedComments[$newType]=$langSet; } 返回$grouppedComments; } api.php

路由::中间件'auth:api'->get'/user',函数请求$Request{ 返回$request->user; }; 路径::apiResources[ “语言”=>“API\LanguagesController”, “用户”=>“API\UsersController”, “角色”=>“API\RolesController”, “标记”=>“API\TagsController”, “类别”=>“API\CategoryController”, “图片”=>“API\PicturesController”, 'posts'=>'API\PostsController', '注释'=>'API\CommentsController' ]; 编辑 我在RedirectIfAuthenticated.php中使用下面的代码,并且当我尝试使用

dd(Auth::user());
它也返回null。顺便说一句,重定向到后端显然不起作用

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        if (Auth::user()->role->power > 5) {
            return redirect('backend');
        }
        return redirect(RouteServiceProvider::HOME);
    }
    return $next($request);
}

这个问题的解决办法相当简单。由于您使用的是api请求laravel default auth无法理解用户,因此passport来了:

https://laravel.com/docs/7.x/passport
如文档中所述,您应该执行3个步骤:

composer require laravel/passport
php artisan migrate
php artisan passport:install
之后,您可以为登录用户生成令牌,并在api身份验证中使用该令牌用于您的api,这是laravel默认身份验证的唯一和更可靠的方式。 此链接也会对您有所帮助:

https://laravel.io/forum/laravel-passport-vue-check-user-authentication
这样,如果您打算在移动或任何其他应用程序中使用api,您只需通过以下方式验证您的用户: 希望这有帮助

编辑 根据您的评论,现在您必须为您的vue api生成令牌以供使用,因此如下所示:

  $token    = $user->createToken(config('app.name'))->accessToken;

        if ($this->isApiType()) {
            $token = $user->createToken(config('app.name'))->accessToken;
        } else {
            Auth::login($user);
            $redirect = $this->getRedirectTo($user);
        }

这必须添加到登录方法的末尾,因此,如果请求来自api,它将为您生成一个JWT令牌,可在vue中用于登录

能否显示您为控制器中的身份验证导入的内容?已安装use Illumb\Support\Facades\AuthPassport 8.4。并且user.php已经使用了Laravel\Passport\HasApiTokens和HasApiTokensThanks,但据我所知,您正在谈论在Vuejs中获取用户详细信息。那部分不是问题。我无法在控制器中获取身份验证用户id。