PostMan 未经授权 401

问题描述 投票:0回答:1

我在尝试在使用 Passport 进行 API 身份验证的 Laravel 应用程序中注册新用户时遇到问题。这是我面临的场景和错误:

场景: 我正在使用 Laravel 开发 RESTful API 并使用 Passport 进行用户身份验证。我正在尝试创建一个端点来通过对 /api/register 的 POST 请求来注册新用户。

错误: 当我尝试通过 Postman 发送适当的 JSON 数据来注册新用户时,我收到以下错误:

json 复制代码 { “姓名”:“帕科”, "email": "[电子邮件受保护]", “密码”:“密码123” } { “错误”:“未经授权2” } 相关代码: 我已经配置了 PassportAuthMiddleware 中间件来保护 API 路由,但我很困惑为什么即使在不应受保护的注册路由上也会收到此错误。

问题:

尝试注册新用户时,什么可能导致出现“Unauthorized2”错误? 我应该采取什么步骤来解决此问题并允许注册请求顺利通过?

Postman Middleware

我尝试使用 withoutMiddleware,但仍然不起作用 api.php (Routes)

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 查看大部分与项目相关的文件,但我无法找出问题所在。

php laravel postman laravel-passport unauthorized
1个回答
0
投票

在 User.php 中将

use Laravel\Sanctum\HasApiTokens;
更改为
use Laravel\Passport\HasApiTokens;

评论这个

\App\Http\Middleware\PassportAuthMiddleware::class
在app\Http\Kernel.php

© www.soinside.com 2019 - 2024. All rights reserved.