使用JWT身份验证的laravel 5.7中不存在Auth Controller

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

我正在尝试使用laravel 5.7实现JWT身份验证,但我在Laravel中发送请求时遇到了问题。错误如下。

error: Object { message: "Class App\\Http\\Controllers\\App\\Http\\Controllers\\AuthController does not exist", exception: "ReflectionException", file: "C:\\Users\\DELL\\Desktop\\laravel+angular\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\Container.php", … }
​
headers: Object { normalizedNames: Map(0), lazyUpdate: null, lazyInit: lazyInit()
 }
​
message: "Http failure response for http://localhost:8000/api/login: 500 Internal Server Error"
​
name: "HttpErrorResponse"
​
ok: false
​
status: 500
​
statusText: "Internal Server Error"
​
url: "http://localhost:8000/api/login"

这是我的auth控制器

   <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;

class AuthController extends Controller
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login']]);
    }

    /**
     * Get a JWT token via given credentials.
     *
     * @param  \Illuminate\Http\Request  $request
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if ($token = $this->guard()->attempt($credentials)) {
            return $this->respondWithToken($token);
        }

        return response()->json(['error' => 'Unauthorized'], 401);
    }

    /**
     * Get the authenticated User
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        return response()->json($this->guard()->user());
    }

    /**
     * Log the user out (Invalidate the token)
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function logout()
    {
        $this->guard()->logout();

        return response()->json(['message' => 'Successfully logged out']);
    }

    /**
     * Refresh a token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken($this->guard()->refresh());
    }

    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => $this->guard()->factory()->getTTL() * 60,
            'user'=> auth()->user()->name
        ]);
    }

    /**
     * Get the guard to be used during authentication.
     *
     * @return \Illuminate\Contracts\Auth\Guard
     */
    public function guard()
    {
        return Auth::guard();
    }
}

它说AuthController不存在我检查的地方,我在laravel项目的http-> controller文件夹中。请帮我 !谢谢 ..!!

jwt laravel-5.7
1个回答
0
投票

这看起来像命名空间问题:

App\Http\Controllers\App\Http\Controllers\AuthController

请注意如何重复App\Http\Controllers

看起来你可能已经忘记了一个领先的\,也许在某处使用App\Http\Controllers\AuthController而不是\App\Http\Controllers\AuthController。没有它,命名空间相对于它所使用的任何脚本的当前命名空间。它类似于文件和URL中的相对或绝对路径。

如果在定义身份验证路由时发生,默认情况下Laravel会将App\Http\Controllers命名空间添加到您为操作提供的任何控制器名称(您可以在RouteServiceProvider.php中看到此定义)。

编辑:

问题似乎是由您遵循的guide中过时的说明引起的:

首先让我们在routes/api.php中添加一些路线,如下所示:

Route::group([

    'middleware' => 'api',
    'namespace' => 'App\Http\Controllers',
    'prefix' => 'auth'

], function ($router) {

    Route::post('login', 'AuthController@login');
    Route::post('logout', 'AuthController@logout');
    Route::post('refresh', 'AuthController@refresh');
    Route::post('me', 'AuthController@me');

});

routes/api.php中定义的路由已经具有App\Http\Controllers的命名空间,因此给予该Route::group()的命名空间被附加到该命名空间,导致我上面提到的重复。如果删除'namespace' => 'App\Http\Controllers',行,则应解决此特定错误。

您可以在他们的develop branch中看到该行已从指南中删除:

首先让我们在routes/api.php中添加一些路线,如下所示:

Route::group([

    'middleware' => 'api',
    'prefix' => 'auth'

], function ($router) {

    Route::post('login', 'AuthController@login');
    Route::post('logout', 'AuthController@logout');
    Route::post('refresh', 'AuthController@refresh');
    Route::post('me', 'AuthController@me');

});
© www.soinside.com 2019 - 2024. All rights reserved.