Контроллер аутентификации не существует в laravel 5.7 с аутентификацией JWT - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь реализовать аутентификацию JWT с помощью laravel 5.7, но у меня возникла проблема при отправке запроса в 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"

вот мой контроллер аутентификации

   <?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 не существует там, где я проверил, и у меня это в папке http-> controller в проекте laravel.Помогите мне, пожалуйста !Спасибо .. !!

1 Ответ

0 голосов
/ 28 октября 2018

Это похоже на проблему с пространством имен:

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).

Редактировать:

Возможно, проблема вызвана устаревшими инструкциями из руководства , которым вы следовали:

Сначала давайте добавим несколько маршрутов в 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',, вы должны решить эту конкретную ошибку.

В их разработке ветки вы можете видеть, что линия уже удалена из направляющей:

Сначала давайте добавим несколько маршрутов в 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');

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...