Laravel + Angular - 在 1 个 GET 方法上获取 401 未经身份验证
Laravel + Angular - Get 401 unauthenticated on 1 GET method
我正在开发一个 Laravel + Angular 应用程序,我只在 1 个 GET 请求中收到 401 Unauthorized。
在这里,我解释了我是如何开发身份验证的,以及它是如何在后端和前端工作的。我希望你能帮助我。
我使用 Laravel Sanctum 在我的应用程序中管理身份验证。这是我对后端进行编程的方式。
我从我的 BD 获取用户 table:
注意:我已经创建了一个单独的控制器,将身份验证功能与用户功能分开,即便如此,我已经尝试将此功能放在我的 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 发出请求,一切正常,如果我没有经过身份验证,它会给我一个错误,如果我之前已经过身份验证,returns 所有数据库用户都如我所料。顺便说一下,我正在使用 cookie 将 jwt 发送到前端。
问题是在我的 Angular 应用程序中,我使用 GET 方法请求我的后端检索这些用户并将它们显示在 table 中。此外,用于检索用户的代码处于查看用户是否通过身份验证的条件内。事实是我不明白可能发生了什么。
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() 方法。
希望我已经解释清楚了。任何你需要知道的信息让我知道。谢谢。
解决方案是在给出错误的请求中更改 api 的路径,而不是将 127.0.0.1 放入本地主机。
我正在开发一个 Laravel + Angular 应用程序,我只在 1 个 GET 请求中收到 401 Unauthorized。
在这里,我解释了我是如何开发身份验证的,以及它是如何在后端和前端工作的。我希望你能帮助我。
我使用 Laravel Sanctum 在我的应用程序中管理身份验证。这是我对后端进行编程的方式。
我从我的 BD 获取用户 table:
注意:我已经创建了一个单独的控制器,将身份验证功能与用户功能分开,即便如此,我已经尝试将此功能放在我的 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 发出请求,一切正常,如果我没有经过身份验证,它会给我一个错误,如果我之前已经过身份验证,returns 所有数据库用户都如我所料。顺便说一下,我正在使用 cookie 将 jwt 发送到前端。
问题是在我的 Angular 应用程序中,我使用 GET 方法请求我的后端检索这些用户并将它们显示在 table 中。此外,用于检索用户的代码处于查看用户是否通过身份验证的条件内。事实是我不明白可能发生了什么。
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() 方法。
希望我已经解释清楚了。任何你需要知道的信息让我知道。谢谢。
解决方案是在给出错误的请求中更改 api 的路径,而不是将 127.0.0.1 放入本地主机。