Laravel Sanctum 返回 401 Unauthorized

时间:2021-06-17 09:41:30

标签: php ajax laravel laravel-sanctum

上下文:

我需要在我的网站上创建一个页面,它是一个 SPA,基本上是一个用户插入其社交号码的投票页面,当点击开始按钮时,我需要登录我为投票创建的用户,使用Sanctum,并获取下一个 Ajax 请求的令牌。

问题:

  1. 我无法使用 Auth:: 对用户进行身份验证,因为它必须无法访问网站,只能访问这个页面,我如何才能在控制器中获取用户?它随请求一起提供?
  2. 我向验证社交号码输入的函数发出请求,然后为投票用户创建令牌并在请求中返回并保存它,但是当我发出另一个请求并在授权标头中发送令牌时,它总是给我 401 未经授权的错误。

验证社会号和返回令牌功能:

 public function verifyNIF(Request $request){
    $nif = $request->nif;
    $slug = $request->slug;

    //TODO:validates NIF in DB

    $user = CbsHelpers::getInPersonUser();


    $token = $user->createToken('in-person-token')->plainTextToken;


    return response()->json([
        'user' => $user,
        'token' => $token,
    ]);



}

Ajax 请求在 Authorization 标头中带有令牌(返回 401 Unauthorized)

 function voteInPerson(topic){
    let topicId = topic.data('topic-id');
    $.ajax({
        url: "/vote",
        type: "POST",
        headers: {
            Authorization: 'Bearer '+token
        },
        data: {

            slug: slug,
            topicId: topicId,
        },
        success: function (data) {
            if (data === "no available votes" && topic.hasClass("not-voted")) {
                showWarningModal(data);
            }
            else {
              changeTopicVote(topic, data);
            }
        },
        error: function (data) {
            if (data.status === 401)
                showWarningModal("login needed");
        }
    });
}

1 个答案:

答案 0 :(得分:0)

问题是路由被设置为中间件('auth')而不是'auth:sanctum'

相关问题