我在尝试在使用 Passport 进行 API 身份验证的 Laravel 应用程序中注册新用户时遇到问题。这是我面临的场景和错误:
场景: 我正在使用 Laravel 开发 RESTful API 并使用 Passport 进行用户身份验证。我正在尝试创建一个端点来通过对 /api/register 的 POST 请求来注册新用户。
错误: 当我尝试通过 Postman 发送适当的 JSON 数据来注册新用户时,我收到以下错误:
json 复制代码 { “姓名”:“帕科”, "email": "[电子邮件受保护]", “密码”:“密码123” } { “错误”:“未经授权2” } 相关代码: 我已经配置了 PassportAuthMiddleware 中间件来保护 API 路由,但我很困惑为什么即使在不应受保护的注册路由上也会收到此错误。
问题:
尝试注册新用户时,什么可能导致出现“Unauthorized2”错误? 我应该采取什么步骤来解决此问题并允许注册请求顺利通过?
我尝试使用 withoutMiddleware,但仍然不起作用
AuthController.php:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Laravel\Sanctum\HasApiTokens;
use App\Enums\Roles;
class AuthController extends Controller
{
/**
* Registro de un nuevo usuario.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 400);
}
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
'role' => Roles::USER, // Asignamos el rol de usuario por defecto al registrar
]);
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json(['token' => $token], 201);
}
/**
* Login de usuario existente.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
$user = $request->user();
$token = $user->createToken('auth_token')->plainTextToken;
// Verificar el rol del usuario y redirigir según el rol
if ($user->role === Roles::ADMIN) {
return response()->json(['token' => $token, 'role' => Roles::ADMIN], 200);
} elseif ($user->role === Roles::USER) {
return response()->json(['token' => $token, 'role' => Roles::USER], 200);
}
// En caso de que el rol no esté definido o no coincida con los roles permitidos
return response()->json(['error' => 'Unauthorized'], 401);
}
return response()->json(['error' => 'Unauthorized'], 401);
}
}
我什至无法访问注册或登录路由,这些路由不应该受到任何中间件的保护。
我什至打开了 GitHub 存储库,以便在必要时可以看到错误。我已经尝试解决这个问题好几天了,但我无法解决。我和老师讨论过这个问题,但我们一直没能一起解决……我不知道还能做什么;这是我新兵训练营的最后一个项目:')我很乐意能够解决它并继续进行测试。 https://github.com/LemonRH/TestSprint5
我尝试了很多不同的方法,但都不起作用。我尝试过进行一些 var 转储,但它甚至没有达到这一点。我开始认为这一定是一个我看不到的愚蠢错误。我尝试使用 ChatGPT 查看大部分与项目相关的文件,但我无法找出问题所在。
在 User.php 中将
use Laravel\Sanctum\HasApiTokens;
更改为 use Laravel\Passport\HasApiTokens;
评论这个
\App\Http\Middleware\PassportAuthMiddleware::class
在app\Http\Kernel.php