如何修复此错误 Symfony\Component\Routing\Exception\RouteNotFoundException:未定义路由 [登录]。在 Laravel 8 中?

Sra*_*ani 13 php laravel laravel-8

我有一个控制器,其中包含三个功能(注册、登录、忘记密码)。对于登录和注册,它工作正常,但是当我尝试在邮递员中使用 API 时,我收到错误,之前我使用单独的控制器来执行忘记密码()功能当时它工作正常,现在我将该控制器移至 USerController 我得到 500 个内部服务器,请帮我解决这个问题.. UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Models\User;
use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use App\Models\PasswordReset;
use App\Notifications\ResetPasswordNotification;


class UserController extends Controller
{
    public function __construct() {
        $this->middleware('auth:api', ['except' => ['login', 'register']]);
    }
    public function register(Request $request)
    {
        $this->validate($request, [
            'fullName'=>'required|string|between:3,15',
            'email'=>'required|email|unique:users',
            'password'=>'required|regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{6,}$/',
            'mobile'=>'required|digits:10'
            ]);
        $user = new User([
            'fullName'=> $request->input('fullName'),
            'email'=> $request->input('email'),
            'password'=> bcrypt($request->input('password')),
            'mobile'=>$request->input('mobile')           
        ]);
        $user->save();
        // User::create($request->getAttributes())->sendEmailVericationNotification();
        return response()->json(['message'=>'Successfully Created user'],201);
    }

    public function login(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required'
        ]);
        $credentials = $request->only('email', 'password');
        try {
            if (!$token = JWTAuth::attempt($credentials)) {
                return response()->json(['error' => 'Invalid Credentials'], 401);
            }
        }catch (JWTException $e) {
            return response()->json(['error' => 'Could not create token'],500);
        }
        return response()->json(['token' => $token], 200);
    }

    public function forgotPassword(Request $request)
    {
        $user = User::where('email', $request->email)->first();
        if (!$user) {
            return response()->json(['error' => 'Email doesn\'t found on our database'],Response::HTTP_NOT_FOUND);
        }
        $passwordReset = PasswordReset::updateOrCreate(
            ['email' => $user->email],
            [
                'email' => $user->email,
                'token' => JWTAuth::fromUser($user)
            ]
        );
        if ($user && $passwordReset) {
            $user->notify(new ResetPasswordNotification($passwordReset->token));
        }
        return response()->json(['data' => 'Reset link is send successfully, please check your inbox.'], Response::HTTP_OK);
    }
    
}
Run Code Online (Sandbox Code Playgroud)

api.php

<?php

use App\Http\Controllers\UserController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;


Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});


Route::group([
    'middleware' => 'api',
    'prefix' => 'auth'
], function ($router) {
    Route::post('/login', [UserController::class, 'login']);
    Route::post('/register', [UserController::class, 'register']);
    Route::post('verifyemail/{token}','VerificationController@verifyEmail');
    Route::post('/sendPasswordResetLink', 'App\Http\Controllers\UserController@forgotPassword');
    Route::post('/resetPassword', 'App\Http\Controllers\ChangePasswordController@resetPassword');
    //Route::get('/email/verify/{id}',[VerificationController::class,'verify']);

});
Run Code Online (Sandbox Code Playgroud)

in postman i am getting following error

<!doctype html><html class="theme-light">
<!--
Symfony\Component\Routing\Exception\RouteNotFoundException: Route [login] not defined. in file C:\Users\VICKY\Desktop\8\laravel-bookstore\vendor\laravel\framework\src\Illuminate\Routing\UrlGenerator.php on line 427

Run Code Online (Sandbox Code Playgroud)

Md *_*qur 31

在标题处添加新配置

"Accept"=>"application/json"
Run Code Online (Sandbox Code Playgroud)

Laravel会检查“ Accept ”的配置,如果“Accept”默认没有设置值,它将返回网页或html

来源帮助

例如 PostMan 标题截图


小智 20

路线受到保护。在请求中包含 Accept application/json ,它将显示: { "message": "Unauthenticated." }


小智 8

我认为,大多数情况下,当未经授权/未经身份验证的资源访问受中间件保护的路由时,通常会发生此错误。我认为您应该通过删除中间件来检查 jwt 令牌是否有效auth:api并将其替换为:

return response()->json([ 'valid' => auth()->check() ]);