Laravel + Angular - 在 1 个 GET 方法上获得 401 未经身份验证

时间:2021-05-07 11:06:33

标签: javascript angular laravel laravel-sanctum

我正在开发 Laravel + Angular 应用程序,但我仅在 1 个 GET 请求中收到 401 Unauthorized。

在这里,我解释了我是如何开发身份验证的,以及它在后端和前端是如何工作的。我希望你能帮助我。

我使用 Laravel Sanctum 在我的应用中管理身份验证。这是我对后端进行编程的方式。

我从我的 BD 表中获取用户:

注意:我创建了一个单独的控制器,将身份验证功能与用户功能分开,即使如此,我也尝试将此功能放在我的 AuthController 中,但它没有给我任何结果.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;

class UsersController extends Controller
{
    public function getAllUsers()
    {
        return User::all();
    }

}

因为我希望您只能在通过身份验证的情况下检索所有数据库用户,所以在我的 api.php 文件中,我将路径放在中间件中:

Route::middleware('auth:sanctum')->group(function() 
{
    Route::post('logout', [\App\Http\Controllers\AuthController::class, 'logout']);
    Route::get('getAuthUser', [\App\Http\Controllers\AuthController::class, 'getAuthUser']);

    //Admin actions
    Route::post('createUser', [\App\Http\Controllers\AuthController::class, 'createUser']);
    Route::get('getAllUsers', [\App\Http\Controllers\UsersController::class, 'getAllUsers']);
});

如果我从 Postman 发出请求,一切正常,如果我没有通过身份验证,它会给我一个错误,如果我之前已经过身份验证,它会按照我的预期返回所有数据库用户。顺便说一句,我正在使用 cookie 将 jwt 发送到前端。

问题是在我的 Angular 应用程序中,我使用 GET 方法请求我的后端检索这些用户并将它们显示在表格中。此外,检索用户的代码处于查看用户是否通过身份验证的条件内。事实是,我不明白可能会发生什么。

getUsers(): void
  {
    //Check if user is authenticated
    this.http.get('http://localhost:8000/api/getAuthUser', { withCredentials: true }). subscribe(
      (res: any) =>
      {
        Emitters.authEmitter.emit(true);
        Emitters.roleEmitter.emit(res.role);
        
        

        //Get all users
        this.http.get('http://127.0.0.1:8000/api/getAllUsers', { withCredentials: true }). subscribe(
          res =>
          {
            this.users = res;
          }
        )
      },
      err =>
      {
        Emitters.authEmitter.emit(false);
        Emitters.roleEmitter.emit("none");
        alert("You should be authenticated for this.");
      }
    );
  }

您在 getAuthUser 上方看到的第一个请求,以与第二个请求 getAllUsers 相同的方式向后端发出请求,第一个请求完美运行,而第二个请求则没有,这是我出错的地方。我在 ngInit() 中调用了 getUsers() 方法。

我希望我已经很好地解释了自己。您需要知道的任何信息都可以告诉我。谢谢。

1 个答案:

答案 0 :(得分:0)

解决办法是在修改api路径的请求中给出错误,而不是把127.0.0.1放在localhost。