我正在尝试使用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文件夹中。请帮我 !谢谢 ..!!
这看起来像命名空间问题:
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'); });